在"silverlight如何在客户端读取文件"以及"silverlight如何在客户端写入文件"两篇文章中我们初步接触了Isolated Storage概念。在此,我们进一步把Isolated Storage相关知识系统梳理一遍并用示例加深理解。
  一、什么是Isolated Storage独立存储?
  独立存储是一种数据存储机制,它在代码与保存的数据之间定义了标准化的关联方式,从而提供隔离性和安全性。同时,标准化也提供了其他好处。管理员可以使用旨在操作独立存储的工具来配置文件存储空间、设置安全策略及删除未使用的数据。通过独立存储,代码不再需要使用唯一的路径来指定文件系统中的安全位置,同时可以保护数据免遭只具有独立存储访问权限的其他应用程序的损坏。不再需要指示应用程序的存储区域位置的“硬编码”信息。

   通过使用独立存储,可以使部分受信任的应用程序以由计算机安全策略控制的方式存储数据。对于用户需慎重运行的 Web 应用程序和下载的组件来说,这尤为有用。安全策略很少向这种代码授予使用标准 I/O 机制访问文件系统的权限,但是默认情况下,会对在本地计算机、本地网络或 Internet 中运行的代码授予使用独立存储的权限。
  Silverlight没有提供直接操作客户端操作系统类文件的手段,但它提供了另一途径来实现在客户端读写数据的需求。这就是Isolated Storage。通过使用Isolated Storage,数据将始终按用户在虚拟文件系统中隔离,虚拟文件系统可以是根目录中的一个文件,也可以是一个目录和文件树。在使用Isolated Storage时,你无需知道Isolated Storage在哪儿或者如何存放数据,它有具备独立存储机制的APIs,这些API提供了一个虚拟的文件系统和可以访问这个虚拟文件系统的数据流对象。它的独立存储是基于 .NET Framework中的独立存储来建立的,所以它是.NET Framework中独立存储的一个子集。

  二、何时使用Isolated Storage独立存储
  一句话总结就是5要3不要
  所谓5要就是5个常用最典型的情况:
    1、下载的控件。不允许从 Internet 下载的托管代码控件通过正常的 I/O 类写入硬盘,但它们可以使用独立存储来持久保存用户设置和应用程序状态。
    2、持久的 Web 应用程序存储。Web 应用程序也被禁止使用 I/O 类。这些程序可以出于与下载组件相同的目的使用独立存储。
    3、共享组件存储。应用程序间共享的组件可以使用独立存储来提供对数据存储区的有控制的访问。
    4、服务器存储。服务器应用程序可以使用独立存储为请求应用程序的大量用户提供单独的存储区。因为独立存储始终按用户进行隔离,所以服务器必须模拟发出请求的用户。在这种情况下,根据主体的标识隔离数据,该标识与应用程序用来区分其用户的标识是同一个标识。
    5、漫游。应用程序还可以将独立存储和漫游用户配置文件一起使用。这允许用户的独立存储区和配置文件一起漫游。
  所谓3不要,就是在3种情况下,您“不”应该使用独立存储:
    1、独立存储不应该用于存储重要机密(例如不加密的密钥或密码),因为对高度受信代码、非托管代码或计算机的受信用户不设防。
    2、独立存储不应该用来存储代码。
    3、独立存储不应该用来存储配置和部署设置,它们是由管理员来控制的。(因为管理员不控制用户首选项,所以用户首选项不被认为是配置设置。)
    当今的许多应用程序都使用数据库来存储和隔离数据,在这种情况下,数据库中的一个或多个行可能代表某个特定用户的存储。当用户数较少时、当使用数据库的系统开销非常大时或当不存在数据库功能时,您可以选择使用独立存储而不使用数据库。另外,当应用程序要求比数据库的行所提供的存储更加灵活和复杂的存储时,独立存储也可以提供一个可行的替代方案。
     此外需要注意的是,在传统的ASP.NET中不能使用Isolated Storage,我们一般使用cookie,session等来达到相关功能,Isolated Storage往往使用在Silverligth中,它不像cookie那样不安全,也不像session那样需要保持对Server端的联系从而不可避免的增加Server端的负载。
  
   三、Silverlight中的独立存储区有以下规则
  (1) 同一网站的不同应用拥有不同的存储区。
  (2) 用不同域名打开网站的同一应用,将各自拥有不同的存储区(存储路径和域名有关)。
  (3) 在不同页面载入同一应用,将使用同一存储区。
  (4) 重命名 XAP 文件会导致重新创建存储区。
  (5) 修改程序集信息(GUID、Version 等)不会重新创建存储区。
  (6) 使用其他同名 XAP 应用包替换应用,将直接使用原先的存储区。

   四、Silverlight中的独立存储有以下一些特征: 
  1.每个基于Silverlight的应用程序都被分配了属于它自己的一部分存储空间, 但是应用程序中的程序集却是在存储空间中共享的。一个应用程序被服务器赋给了一个唯一的固定的标识值。基于Silverlight的应用程序的虚拟文件系统现在就以一个标识值的方式来访问了。这个标识值必须是一个常量,这样每次应用程序运行时才可以找到这个共享的位置。   
  2.独立存储的APIs 其实和其它的文件操作APIs类似,比如 File 和 Directory 这些用来访问和维护文件或文件夹的类。 它们都是基于FileStream APIs 来维护文件的内容的。 
  3.独立存储严格的限制了应用程序可以存储的数据的大小,目前的上限是每个应用程序为1 MB。 

   五、Silverlight中的独立存储有两种使用方式:
     1、文件方式,此方式使用IsolatedStorageFile类,此类包括两种子类:
         IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表
         IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表
    此类常用方法有:Add, Contains,Remove
  2、key-value方式,此方式使用IsolatedStorageSettings类,此类包括两种方法:
         IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储
         IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储

   下一篇我们建立一个名为MyIsolateSL的Silverlight应用程序来加深对上面总结的认识。

posted on 2012-09-08 20:08  裴银祥的博客园  阅读(202)  评论(0编辑  收藏  举报