Нашият проект използва 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 са конфигурирани по такъв начин, че уеб съдържанието изтича незабавно.
Веднага щом добавите 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 е добавен с динамично генериран параметър.
Може ли някой да предостави някои стъпки за това как трябва да разрешим проблема?