Lorsque je travaille avec Silverlight, j’ai remarqué que Firefox mettrait en cache le fichier XAP, donc si je fais une mise à jour, un utilisateur peut être bloqué par une version obsolète. Existe-t-il un moyen de forcer le navigateur à re-télécharger le fichier XAP à chaque fois, ou peut-être seulement à le forcer après la publication d’une mise à jour? Ou existe-t-il un paramètre dans la configuration de Silverlight qui empêche le navigateur de mettre en cache le fichier XAP?
Merci Jeff
La chaîne de requête fonctionne parfaitement, mais je n’utiliserais pas DateTime.Now , car cela oblige l’utilisateur à re-télécharger l’application à chaque fois. Au lieu de cela, nous utilisons les éléments suivants:
protected void Page_Load(object sender, EventArgs e) { var versionNumber = Assembly.GetExecutingAssembly().GetName().Version.ToSsortingng(); this.myApp.Source += "?" + versionNumber; }
De cette façon, il suffit d’incrémenter le numéro de version dans le fichier AssemblyInfo.cs .
Manière la plus simple:
C’est ce que je fais en PHP. Vous lisez la date / heure du fichier xap et ajoutez-le en tant que paramètre au lien de téléchargement. De cette façon, le navigateur voit les nouvelles versions de fichiers comme de nouveaux liens, et donc pas dans son cache.
Simple et ça marche. De plus, les navigateurs continuent de mettre en cache correctement les fichiers sans téléchargement.
Pour moi, la meilleure réponse est de Chris Cairns . Je viens de l’adapter un peu, en appelant ToSsortingng et GetHashCode, générant un identifiant à l’horodatage:
" />
Fonctionne très bien!
Vous trouverez peut-être utile le didacticiel de mise en cache pour les auteurs Web et les Webmasters . Ce document traite des différents caches à travers lesquels le client et le serveur interagissent (navigateur, proxy, passerelle) et comment la mise en cache peut être contrôlée.
Vous pouvez envoyer des en-têtes HTTP pour l’empêcher de mettre en cache:
Cache-control: no-cache Pragma: no-cache
La façon dont vous procédez dépend du serveur Web que vous utilisez.
Une autre solution consisterait à append la version du fichier XAP plutôt qu’un horodatage. L’horodatage changerait à chaque fois (peut aussi bien désactiver la mise en cache). Le faire changer uniquement lorsque le XAP a été mis à jour reviendrait à prendre des informations à partir du fichier XAP. Est-ce que je cherche encore ce que je pourrais utiliser, peut-être la dernière date de modification du fichier XAP?
L’ajout de l’horodatage pour le XAP a fonctionné pour moi (j’ajoute le contrôle SL en javascript, mais cela pourrait aussi bien être fait en ligne):
var appTimestamp = '<%= System.IO.File.GetLastWriteTime(Server.MapPath("ClientBin/MyApp.xap")) %>'; var source = 'ClientBin/MyApp.xap?appTimestamp=' + appTimestamp;
Cela a testé et fonctionne:
Mettez ceci:
<% const string sourceValue = @"ClientBin/MyXapFile.xap"; string param; if(System.Diagnostics.Debugger.IsAttached) param = ""; else { var xappath = HttpContext.Current.Server.MapPath(@"") + @"\" + sourceValue; var xapCreationDate = System.IO.File.GetLastWriteTime(xappath); param = ""; } Response.Write(param); %>
Au lieu de cela:
Je fais fonctionner ceci par une combinaison des suggestions ci-dessus:
Définissez la propriété Source du contrôle ASP.NET Silverlight dans le code, en ajoutant un horodatage à l’URL .xap, par exemple
Silverlight1.Source = “ClientBin / MyApplication.xap?” + DateTime.Now.ToSsortingng (“dd-MM-yy-HH: mm: ss”);
Vous pouvez append l’URL source dans la balise d’object avec la date de dernière écriture du fichier XAP. Vérifiez le code sur mon blog .
Nous sums également dans la même situation où nous souhaitons contrôler le téléchargement du fichier .XAP sur le navigateur.
Une approche que vous pouvez envisager consiste à utiliser le stockage isolé Silverlight en tant que “cache” pour stocker vos fichiers .XAP.
Découvrez ce blog: IsolatedStorage en tant que cache d’object Silverlight
Une idée très simple: ajoutez simplement une fausse chaîne de requête à l’URL.
La plupart des serveurs doivent l’ignorer et le serveur doit normalement gérer le fichier – cela dépend de votre serveur. Si vous devenez vraiment intelligent, vous pouvez rendre la page d’hébergement dynamic et append automatiquement une chaîne de tick-count ou de date-heure à la chaîne de requête. Cela garantit que vous obtenez la mise en cache quand vous le voulez, mais forcez un téléchargement quand il y a un changement.
Idéalement, votre serveur devrait le faire pour vous. Mais sinon …
J’ai eu ce problème alors maintenant, quand je lance une nouvelle application, je mets la version d’assemblage à 0.0.0.1 et je la mets à jour par un sur chaque déploiement, ce qui semble l’avoir résolu pour moi. Ensuite, remettez-le à la version 1.0.0.0 lors de la publication.
Jusqu’à présent, la seule solution que j’ai trouvée, une fois le problème rencontré, est d’effacer le cache de Firefox.
Une meilleure solution serait beaucoup mieux.
J’utilise cette solution
L’idée de chaîne de requête ne fonctionne pas pour moi dans Silverlight 4. Le serveur semble mettre en cache le xap sacré (mais pas le fichier aspx). La solution qui fonctionne dans SL4 consiste à accéder aux propriétés de votre projet Silverlight, à accéder aux informations d’assembly et à les insérer dans une version.