このプロジェクトでは、Silverlight 4 と、Silverlight で動作するデータ プレゼンテーション ツールである Microsoft Pivot Viewer を使用します。
Microsoft Pivot Viewer を使用すると、強力で有益で楽しい方法で大量のデータを簡単に操作できます。Microsoft Live Labs は一歩下がって、Web の従来の構造ではなく、情報の複雑さと規模に対応する対話モデルを設計しようとしました。
Siliverlight と Microsoft Pivot Viewer を使用するアプリケーション内のモジュールには、かなりのキャッシングの問題があります。
Siliverlight と Microsoft Pivot Viewer を使用するアプリケーション内のモジュールは、実行時に画像を動的に取得し、Siliverlight と Microsoft Pivot Viewer でユーザーに画像を表示します。
問題は、IE9 が Siliverlight と Microsoft Pivot Viewer の画像をキャッシュすることです。
IIS の HTTP 応答ヘッダーは、Web コンテンツがすぐに期限切れになるように構成されています。
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 は Cache for Silverlight から古いデータを取得し続けるため、失敗します。
次の取り組みでは、キャッシュの問題を解決できませんでした:
1) Web コンテンツがすぐに期限切れになるように IIS の HTTP 応答ヘッダーが構成された後でも、ユーザーの IE9 は引き続きキャッシュします。2) Silverlight XAP URL に動的に生成されたパラメーターが追加されていることを確認した後でも、ユーザーの IE9 は引き続きキャッシュします。
問題を解決する方法について、誰かがいくつかの手順を提供してもらえますか?