2010-01-28 4 views
6

Компания, в которой я работаю, имеет прокси/WAN-ускорители между нашими международными сайтами для кэширования веб-контента Intranet. У меня есть приложение Silverlight, размещаемое на сервере в одном месте, но доступ к которому осуществляется клиентами в другом месте. Когда пользователи получают доступ к веб-странице, на которой размещается приложение Silverlight, они получают устаревший файл xap, кэшированный прокси, а не последнюю версию с сервера. Локальные пользователи всегда получают последний xap, поскольку их запросы не проходят через прокси.Предотвращение кэширования Silverlight xap прокси-сервером

Я пробовал различные методы заголовка/метаданных, упомянутые в других местах, чтобы предотвратить кеширование, а сама содержащая веб-страница обновляется, но я все равно получаю старый .xap-файл. За исключением того, что наш ИТ-администратор отключил кэширование прокси для моего сайта, могу ли я что-нибудь сделать, чтобы последний xap-файл получался с сервера вместо прокси-сервера? Содержащая страница - ASP.NET.

ответ

4

Что я делаю, просто добавьте запрос в конце пути к файлу xap. Затем, когда вы изменяете переменную querystring, прокси и т. Д. Должны рассматривать ее как запрос к новому файлу. До сих пор это работало хорошо для меня.

Так в основном, когда встраивание .xap в прямой вверх HTML файл, вы могли бы сделать это:

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

И затем при развертывании новой версии, просто измените «whatevervalue» к чему-то еще.

EDIT
Если вам нужно использовать эту технику во многих местах в вашем приложении я прочитал бы значение строки запроса от конфигурации и просто записать его на страницу с помощью ASP.NET. Таким образом вам нужно обновить его только в одном месте при развертывании.

+0

Отлично! Спасибо, спасибо. –

+0

В моем решении SL, anyvalue - это метка времени (номер галочки) файла XAP на диске. Я реализовал небольшой помощник ASP.NET, который добавляет временную метку в качестве запроса имени файла. Таким образом, он полностью автоматизирован и вам ничего не нужно обновлять - просто отпустите XAP в ClientBin и он автоматически обновится, когда пользователь попытается его извлечь. Тогда, в ASPX, у меня есть что-то вроде: <парам имя = "источник" значение = "<% = Helper.AppendTimestamp ("ClientBin/SilverlightApp.xap")%>" /> –

+0

Это действительно умный. Я мог бы решить переключиться на эту технику. –

2

Если вы хотите, чтобы убедиться, что каждый раз, когда файл XAP извлекается и вы не хотите, чтобы беспокоиться об этом - просто использовать < парам имя = «источник» значение = "ClientBin/YourSilverlightapp.xap < % = Guid.NewGuid(). ToString()% > "/ >

Конечно - это поддается большей нагрузке на кеш. Мне нравится вспомогательный метод выше, хотя, если вы хотите, чтобы изменения распространялись на клиента.

Смежные вопросы