2010-01-28 15 views
6

Die Firma, für die ich arbeite, hat Proxies/WAN-Beschleuniger zwischen unseren internationalen Standorten, um Intranet-Webinhalte zwischenzuspeichern. Ich habe eine Silverlight-Anwendung, die auf einem Server an einem Ort gehostet wird, auf die aber von Clients an einem anderen Ort zugegriffen wird. Wenn die Benutzer auf die Webseite zugreifen, die die Silverlight-App hostet, erhalten sie die veraltete xap-Datei, die vom Proxy zwischengespeichert wird, und nicht die neueste Version vom Server. Lokale Benutzer erhalten immer das neueste xap, da ihre Anforderungen keinen Proxy durchlaufen.Verhindern, dass Silverlight xap vom Proxyserver zwischengespeichert wird

Ich habe versucht, die verschiedenen Header/Metadaten-Techniken an anderer Stelle erwähnt, um Zwischenspeichern zu verhindern, und die enthaltende Webseite selbst wird frisch serviert, aber ich bekomme immer noch die alte .xap-Datei. Abgesehen davon, dass unser IT-Administrator das Proxy-Caching für meine Website deaktiviert, kann ich sicherstellen, dass die neueste xap-Datei vom Server anstatt vom Proxy abgerufen wird? Die enthaltende Seite ist ASP.NET.

Antwort

4

Was ich tue, ist nur eine Querystring am Ende des Pfades zur XAP-Datei hinzufügen. Wenn Sie dann die Querystring-Variable ändern, sollten die Proxies usw. diese als Anforderung für eine neue Datei sehen. Bis jetzt hat das für mich gut funktioniert.

Also im Grunde, wenn eine XAP in einem straight-up HTML-Datei eingebettet ist, würden Sie dies tun:

<param name="source" value="ClientBin/SilverlightApplication1.xap?cachepreventer=whatevervalue"/> 

Und dann, wenn Sie eine neue Version bereitstellen, ändern Sie einfach „whatevervalue“ auf etwas anderes. mit asp.net

EDIT
Wenn Sie diese Technik in vielen Orten in Ihrer App verwenden müssen, würde ich den Abfragezeichenfolgeflag Wert von Config lesen und es nur auf der Seite schreiben. Auf diese Weise müssen Sie es nur an einer Stelle aktualisieren, wenn Sie es bereitstellen.

+0

Perfekt! Das hat den Trick gemacht, danke. –

+0

In meiner SL-Lösung ist whatevervalue der Zeitstempel (Tick-Nummer) der XAP-Datei auf der Festplatte. Ich habe kleine ASP.NET-Helfer implementiert, die Zeitstempel als Abfrage an Name der Datei anfügt. Auf diese Weise ist es völlig automatisch und Sie müssen nichts irgendwo aktualisieren - nur XAP in ClientBin ablegen und es wird automatisch aktualisiert, wenn der Benutzer versucht, es zu holen. Dann in ASPX, ich habe so etwas wie: " /> –

+0

Das ist wirklich clever. Ich könnte mich entscheiden, zu dieser Technik zu wechseln. –

2

Wenn Sie wollen sicherstellen, dass jedes Mal die XAP-Datei abgerufen wird und Sie nicht wollen, sich darum kümmern - verwenden nur < param name = „Quelle“ value = "ClientBin/YourSilverlightapp.xap < % = Guid.NewGuid(). ToString()% > "/ >

natürlich - dies eignet sich für eine höhere Cache-Auslastung. Ich mag die obige Hilfsmethode, wenn Sie nur möchten, dass Änderungen an den Client weitergegeben werden.