silverlight版本更新问题求助
- VB.NET code
Private Function CheckNeedDownload() As Boolean Dim store As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication() Dim path As String = System.IO.Path.Combine(strCacheDirectory, strCacheXap) '检查需要下载的文件在当前缓存区域是否已经存在 If store.DirectoryExists(strCacheDirectory) = False Or store.FileExists(path) = False Then Return True Else Dim stream As IsolatedStorageFileStream = store.OpenFile(path, FileMode.Open, FileAccess.Read) If stream.Length.Equals(g_NewXapSize + 1) = False Then stream.Close() ClearExternalXapCache() Return True Else stream.Close() Return False 'False 2012-2-22 zfy 由False改为True 不检查Xap包大小,直接下载 End If End If End Function
silverlight新版Xap包字节数存放在数据库,读出来与缓存中的Xap包字节数比较,如果不一致,则下载,一致则直接读缓存中的Xap包,为什么有的客户端需要手动清除缓存才能使用新版本,这个有没有一劳永逸的办法,不用手动清除缓存。也想不检查Xap包大小,直接下载,但有两个问题,一是不能同时打开两个相同的silverlight程序,二是每次都下载,速度慢,影响用户体验,网上看了一个用版本解决方案,http://www.cnblogs.com/yjmyzz/archive/2011/08/07/2130308.html
[解决办法]
可以考虑对Xap包添加一个版本号,然后在独立存储中增加一个缓存区存放最近的一个Xap包版本。如果版本相同则不更新,否则强制更新。
[解决办法]
类似IIS之类的正规的web服务器软件,都有这类功能,当一个文件没有改变时,它就会返回304信息给浏览器端,让浏览器端去使用它本地的缓存文件。所以你用不着写程序去比较什么文件大小,根本不应该让操作流程流到你的程序中,而应该在web服务器那一层就解决了。
解决方法就是:如果对于某个文件,你想让客户端可以使用缓存,那么你不要将这个文件上传到网站上更新,这就行了。