Много программных решений до сих пор. Однако решение заключается в простой настройке директивы ClientBin (или любой другой папки, в которой вы храните ваши XAP) на сервере.
Предполагая, что IIS вам нужно явно указать папку ClientBin, срок действия истекает немедленно. Это приведет к отправке правильных заголовков конфигурации кэша при получении XAP. В свою очередь, браузер будет пытаться удалить XAP каждый раз, когда это необходимо, но в подавляющем большинстве случаев просто получит немодифицированный ответ 304 и сможет продолжать использовать свою кэшированную копию.
Полагаю, вы видите классическую эвристическую проблему IE. В отсутствие каких-либо заголовков конфигурации кэша IE решает, стоит ли вообще пытаться повторно запросить ресурс в соответствии со своими собственными внутренними алгоритмами. Обеспечивая отправку правильных заголовков истечения, IE будет выполнять инструкции серверов.
Редактировать
Кажется, мне нужно сделать работу этого подхода более понятной. Этот подход не оставляет ресурс XAP без кэширования и нуждается в извлечении каждый раз, когда это необходимо.
Указав функцию «Немедленно истечь» в IIS, мы получаем следующие заголовки в ответе: -
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 22359
Content-Type: application/octet-stream
Last-Modified: Tue, 21 Jul 2009 11:59:28 GMT
ETag: "fe734cb3fa9ca1:1352"
Это не мешает кэшированию XAP, это просто означает, что браузер не может использовать кэшированный XAP без предварительного запроса его с сервера. Обратите внимание на заголовки Last-Modified и ETag.
Последующий запрос выглядит так: -
GET /clientBin/SomeApp.xap HTTP/1.1
If-Modified-Since: Tue, 21 Jul 2009 11:59:28 GMT
If-None-Match: "fe734cb3fa9ca1:135a"
Host: myhost.com
Ответ: -
HTTP/1.1 304 Not Modified
Cache-Control: no-cache
Last-Modified: Tue, 21 Jul 2009 11:59:28 GMT
Tag: "fe734cb3fa9ca1:135a"
Этот ответ не содержит тела объекта, он дает браузеру разрешение на использование и использование существующего XAP в кэше.
Если XAP большой, то, возможно, браузер на самом деле не кеширует его с помощью Cache-Control, заданного как no-cache. Следовательно, на самом деле может быть лучше быть более явным.
Вместо использования поля Expires Immediately используйте настройку заголовка Cache-Control, используя список пользовательских заголовков. Укажите: -
Cache-Control: max-age=0
Это приведет к тому, что браузер будет кэшировать большие XAP, но сразу же их истечет.