?Как да спрем IE9 винаги да извлича остарели данни от кеша?

Нашият проект използва Silverlight 4 и Microsoft Pivot Viewer, който е инструмент за представяне на данни, който работи в Silverlight.

Microsoft Pivot Viewer улеснява взаимодействието с огромни количества данни по начини, които са мощни, информативни и забавни. Microsoft Live Labs се опита да направи крачка назад и да проектира модел на взаимодействие, който се приспособява към сложността и мащаба на информацията, а не към традиционната структура на мрежата.

Модулът в нашето приложение, който използва Siliverlight и Microsoft Pivot Viewer, има доста проблеми с кеша.

Модулът в нашето приложение, който използва Siliverlight и Microsoft Pivot Viewer, динамично извлича изображения по време на изпълнение, така че да ги представи на потребителя в Siliverlight и Microsoft Pivot Viewer.

Проблемът, който имаме, е, че IE9 кешира изображенията в Siliverlight и Microsoft Pivot Viewer.

Заглавките на HTTP отговора на IIS са конфигурирани по такъв начин, че уеб съдържанието изтича незабавно. Настройка за заглавки на HTTP отговор за папка ClientBin, която съдържа Silverlight XAP

Веднага щом добавите URL параметър (напр. „?v1″“ или динамично генериран параметър като във вашия код), кеширането от страна на клиента се изключва от браузъра, освен ако изрично не е зададена дата на изтичане.

Опитахме следното във файла Siliverlight и Microsoft Pivot Viewer Host ASPX:

    <div id="silverlightControlHost">
    <object id="pivotViewer" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="900">   
<%
    HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
    HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
    HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.Cache.SetNoStore();
    string orgSourceValue = @"ClientBin/SilverlightPivotViewer.xap";

string param;

if (System.Diagnostics.Debugger.IsAttached)

param = "<param name=\"source\" value=\"" + orgSourceValue + "\" />";

else

{

string xappath = HttpContext.Current.Server.MapPath(@"") + @"\" +     orgSourceValue;

DateTime xapCreationDate = System.IO.File.GetLastWriteTime(xappath);

param = "<param name=\"source\" value=\"" + orgSourceValue + "?ignore="

+ xapCreationDate.ToString() + "\" />";

}

Response.Write(param);

%>
      <param name="onError" value="onSilverlightError" />
      <param name="background" value="white" />
      <param name="minRuntimeVersion" value="4.0.50401.0" />
      <param name="autoUpgrade" value="true" />

      <param name="initParams" value="cxml=Resources.cxml" />

      <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
          <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
      </a>
    </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>

Google Chrome и Mozilla Firefox изглежда работят добре. Въпреки това, IE9 се проваля, защото продължава да получава остарели данни от кеша за Silverlight.

Следните ни усилия не успяха да разрешат проблема с кеширането:

1) IE9 на потребителя продължава да кешира дори след като заглавките на HTTP отговора на IIS са конфигурирани по такъв начин, че уеб съдържанието изтича незабавно. 2) IE9 на потребителя все още кешира дори след като сме се уверили, че URL адресът на Silverlight XAP е добавен с динамично генериран параметър.

Може ли някой да предостави някои стъпки за това как трябва да разрешим проблема?


person user1338998    schedule 17.05.2012    source източник
comment
Притеснявате ли се от кеширането на silverlight XAP или изображенията, които изтегля приложението silverlight?   -  person MerickOWA    schedule 18.05.2012
comment
Може също да е полезно да опишете какво правите в IE9, щраквате ли върху връзка и след това щраквате върху бутона за връщане назад? натискане на бутона за презареждане? или затваряне на браузъра и повторно отваряне?   -  person MerickOWA    schedule 18.05.2012
comment
@MerickOWA Модулът Silverlight/Pivot Viewer в моето приложение ще зареди изображения от хранилище. Хранилището се променя, когато потребителите добавят съдържание към хранилището. В IE9 модулът Silverlight/Pivot Viewer не успява да получи най-новото от хранилището, защото IE9 получава от кеша на компютъра на потребителя. FireFox и Chrome винаги се връщат към сървъра и правилно получават най-новите данни. Как мога да накарам IE9 да отива на сървъра през цялото време? PS. Щраквам върху връзка, за да стигна до страницата AXPX, която хоства моя XAP файл Silverlight/Pivot Viewer.   -  person user1338998    schedule 18.05.2012
comment
също така маркирахте ли .cxml и изображенията да изтичат незабавно в IIS? Може да е от полза да използвате инструмент като fiddler и да проверите заглавките, върнати от XAP файла, както и .cxml и файловете с изображения, върнати към контрола за завъртане, за да сте сигурни, че сървърът уведомява IE9, че не трябва да ги кешира.   -  person MerickOWA    schedule 18.05.2012


Отговори (1)


Много временна корекция - която можете да използвате само по време на разработката - е F12 на уеб страницата, за да изведете инструментите за разработчици. След това от менюто избирате Cache > Always refresh from server.

Иска ми се да знаех как да поправя това по-трайно.

person Martin McGirk    schedule 17.05.2012