了解Silverlight,MEF,按需Xap加载和缓存

时间:2011-02-09 04:30:46

标签: silverlight caching mef

我目前在Silverlight 4应用程序中成功使用MEF加载按需Xaps。我现在正在研究通过使用缓存来提高性能。我的理解是,MEF使用WebClient下载Xap,后者又将使用浏览器的下载机制,因此受其缓存策略的约束。

在我的测试中,我看到的结果有点混乱,浏览器的结果也不同。显然,在第一次访问时,清除了我的缓存,从服务器请求按需Xaps。并且,在应用程序会话期间,Xaps仅下载一次。到目前为止一切都很好。

但是,我期待(或者至少希望)Xaps也可以在浏览器会话之间缓存。但不 - 我观察以下内容(使用fiddler):

Internet Explorer

如果我刷新浏览器(Ctrl + F5),则不会从服务器请求按需Xaps,而是从本地缓存加载。但如果我重新启动浏览器,则会再次下载所有内容。嘘声。

Firefox和Chrome

如果我刷新页面(Ctrl + F5),则会再次从服务器请求按需Xaps - 根本不会发生缓存。嘘。显然,如果我重新启动浏览器,则不会发生缓存。

我的理想行为是浏览器,当需要加载Xap时,使用If-Modified-Since标头查询服务器以查看是否存在新版本,如果是,则下载它,如果不是,从本地缓存加载它。但是在我的测试中没有一个我看到发送到服务器的If-Modified-Since标头。所以我的问题是:

有没有办法透明地使用MEF实现这一目标?还是另一个框架?或者我是否必须使用独立存储(yuck)滚动自己的缓存层?

似乎按需Xap加载应该与缓存一起进行,所以我很惊讶这不仅仅是开箱即用。

1 个答案:

答案 0 :(得分:2)

好的,我在发布此问题后就明白了。我想我会在这里分享解决方案以防其他人遇到问题:

我使用内置的Visual Studio Web服务器来托管我的项目。它似乎根本不支持缓存。但是当我在IIS中托管我的项目时,我看到了我想要的确切行为,具体来说:

  

对我而言,理想的行为就是为了   浏览器,当它需要加载Xap时,   用一个查询服务器   If-Modified-Since标头,看是否   新版本存在,如果是这样下载   它,如果没有,从本地加载它   高速缓存

至少在Internet Explorer中,我现在可以看到它发送If-Modified-Since标头,并接收最近访问过的Xaps的304 Not Modified响应。完美!