我目前在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加载应该与缓存一起进行,所以我很惊讶这不仅仅是开箱即用。
答案 0 :(得分:2)
好的,我在发布此问题后就明白了。我想我会在这里分享解决方案以防其他人遇到问题:
我使用内置的Visual Studio Web服务器来托管我的项目。它似乎根本不支持缓存。但是当我在IIS中托管我的项目时,我看到了我想要的确切行为,具体来说:
对我而言,理想的行为就是为了 浏览器,当它需要加载Xap时, 用一个查询服务器 If-Modified-Since标头,看是否 新版本存在,如果是这样下载 它,如果没有,从本地加载它 高速缓存
至少在Internet Explorer中,我现在可以看到它发送If-Modified-Since标头,并接收最近访问过的Xaps的304 Not Modified响应。完美!