Silverlight - Penyimpanan Terisolasi

Mekanisme akses file ketiga adalah Isolated Storagemekanisme, yang menyediakan penyimpanan yang terkait dengan pengguna yang masuk. API menyajikan data melaluiStream kelas dari .NET System.IOnamespace. Oleh karena itu, seperti mekanisme lain yang telah kita bahas sejauh ini, Anda dapat menggunakan jenis lain diSystem.IO untuk bekerja dengan stream, memungkinkan Anda menyimpan data tekstual atau biner.

Beberapa fitur penting adalah -

  • Mekanisme penyimpanan ini disebut Isolated Storage karena toko dipartisi, dan aplikasi Silverlight hanya memiliki akses ke bagian tertentu.

  • Anda tidak dapat mengakses data lama yang disimpan. Pertama-tama, toko dipartisi per pengguna. Aplikasi Silverlight tidak bisa mendapatkan akses ke penyimpanan untuk pengguna yang berbeda dari yang masuk, dan menjalankan aplikasi.

  • Ini tidak ada hubungannya dengan mekanisme identifikasi apa pun yang mungkin digunakan aplikasi web Anda. Itu adalah poin penting untuk diingat karena beberapa orang yang berbagi komputer tidak peduli dengan akun Windows yang terpisah, dan terbiasa hanya untuk masuk dan keluar dari situs web yang mereka gunakan.

Menggunakan Penyimpanan Terisolasi

Penyimpanan Terisolasi tidak khusus untuk Silverlight. API awalnya diperkenalkan untukWindows Formsuntuk mengaktifkan aplikasi yang diluncurkan dari web untuk menyimpan data secara lokal dalam skenario kepercayaan parsial. Implementasinya berbeda, dan tidak ada cara untuk mengakses penuh.NET Framework's Isolated Storage from Silverlight's, atau sebaliknya.

Namun, jika sudah pernah menggunakannya, langkah-langkah di sini akan terlihat sangat familiar.

  • Anda mulai dengan menanyakan toko khusus pengguna. Dalam hal ini, kami meminta yang untuk aplikasi tersebut. Jika kami ingin penyimpanan per situs dibagikan oleh semua XAP di situs, kami akan meneleponGetUserStoreForSite sebagai gantinya.

  • Salah satu metode mengembalikan IsolatedStorageFile objek, yang merupakan nama yang tidak membantu karena ini mewakili direktori, bukan file.

  • Untuk mengakses file, Anda perlu menanyakan IsolatedStorageFile untuk sebuah Stream.

  • Kami menggunakan IsolatedStorageFileStream kelas, dan konstruktornya mengharuskan Anda untuk meneruskan IsolatedStorageFile objek sebagai argumen.

  • Jadi kami membuat file baru di toko. Lokasi persis file pada disk tidak diketahui.

  • Direktori berisi memiliki elemen acak agar tidak mungkin untuk menebak nama file.

  • Tanpa ini, situs web berbahaya mungkin dapat menempatkan file di komputer pengguna, dan kemudian membuat URL file untuk membukanya, dengan harapan dapat menipu pengguna agar mengklik tautan yang menjalankan program secara lokal.

  • Ada berbagai perlindungan lain yang dibangun ke dalam Windows yang mencoba mencegah hal ini terjadi, tetapi ini adalah lapisan pertahanan lain jika yang lain entah bagaimana telah dinonaktifkan, atau dilewati.

  • File tersebut akan disimpan di suatu tempat di dalam profil pengguna, tetapi hanya itu yang Anda ketahui. AndaIsolatedStorageFileStream tidak akan melaporkan lokasinya yang sebenarnya.

Mari kita lihat contoh sederhana yang melacak berapa kali aplikasi telah dijalankan. Diberikan di bawah ini adalah kode XAML.

<UserControl x:Class = "StoreRunCount.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d" 
   d:DesignHeight = "300" d:DesignWidth = "400"> 
   
   <Grid x:Name = "LayoutRoot" Background = "White"> 
      <TextBlock x:Name = "runCountText" FontSize = "20" /> 
   </Grid> 
	
</UserControl>

Berikut adalah kode C # di mana Isolated storage digunakan.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

using System.IO.IsolatedStorage; 
using System.IO;

namespace StoreRunCount { 

   public partial class MainPage : UserControl {
	
      const string RunCountFileName = "RunCount.bin"; 
		
      public MainPage() { 
         InitializeComponent();  
         int runCount = 0;  
			
         using (var store = IsolatedStorageFile.GetUserStoreForApplication()) { 
			
            if (store.FileExists(RunCountFileName)) { 
               using (var stm = store.OpenFile(RunCountFileName, 
                  FileMode.Open, FileAccess.Read)) 
               using (var r = new BinaryReader(stm)) { 
                  runCount = r.ReadInt32(); 
               }  
            } 
			
            runCount += 1;  
            using (var stm = store.OpenFile(RunCountFileName, 
               FileMode.Create, FileAccess.Write)) 
					
            using (var w = new BinaryWriter(stm)) { 
               w.Write(runCount); 
            } 
         }  
			
         runCountText.Text = "You have run this application " + runCount.ToString() + " time(s)"; 
      } 
   }
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat halaman web berikut yang akan menunjukkan kepada Anda berapa kali Anda menjalankan aplikasi ini.

Meningkatkan Kuota Anda

Aplikasi mungkin meminta lebih banyak ruang jika jumlah awal tidak mencukupi karena beberapa alasan. Tidak ada jaminan bahwa permintaan tersebut akan berhasil. Silverlight akan menanyakan kepada pengguna apakah mereka senang memberikan aplikasi lebih banyak ruang.

Ngomong-ngomong, Anda hanya diizinkan untuk meminta lebih banyak penyimpanan sebagai tanggapan atas masukan pengguna, seperti file click. Jika Anda mencoba menanyakannya di lain waktu, seperti saat plugin dimuat, atau di penangan pengatur waktu, Silverlight secara otomatis akan gagal meminta permintaan bahkan tanpa meminta pengguna. Kuota tambahan hanya tersedia untuk aplikasi yang berinteraksi dengan pengguna.

Itu IsolatedStorageFile objek menyediakan tiga anggota untuk mengelola kuota -

  • AvailableFreeSpace
  • IncreaseQuotaTo
  • Quota

AvailableFreeSpace

Properti AvailableFreeSpace memberi tahu Anda berapa banyak kuota yang masih gratis.

Perhatikan bahwa bahkan subdirektori kosong menghabiskan sebagian kuota Anda karena sistem operasi perlu mengalokasikan ruang pada disk untuk mewakili direktori. Jadi, ruang yang tersedia mungkin kurang dari total kuota, dikurangi jumlah ukuran semua file Anda.

Meningkatkan KuotaTo

Jika Anda tidak memiliki cukup ruang untuk melanjutkan, Anda meminta lebih banyak dengan menelepon IncreaseQuotaTo metode.

Kuota

Di sini kami menggunakan properti ketiga, Quota, untuk mengetahui ukuran kuota saat ini, lalu kami menambahkan jumlah ekstra yang kami perlukan untuk mendapatkan kuota baru yang diminta.

Metode ini juga mengembalikan True atau Falseuntuk menunjukkan apakah kita diberi apa yang kita minta. Perhatikan bahwa Silverlight mungkin memutuskan untuk mengalokasikan lebih banyak ruang daripada yang Anda minta.

Berikut adalah contoh sederhana untuk meningkatkan quota, saat tombol diklik. Diberikan di bawah ini adalah kode XAML.

<UserControl x:Class = "ChangeQuota.MainPage" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
   mc:Ignorable = "d" 
   d:DesignHeight = "300" d:DesignWidth = "400"> 
   
   <Grid x:Name = "LayoutRoot" Background = "White"> 
      <TextBlock x:Name = "infoText" FontSize = "20" TextWrapping = "Wrap" />  
      <Button x:Name = "increaseQuota" Content = "Increase" HorizontalAlignment = "Center" 
         FontSize = "20" 
         VerticalAlignment = "Center" Click = "increaseQuota_Click" /> 
   </Grid>
	
</UserControl>

Berikut adalah implementasi dari click acara di mana kuota ditingkatkan.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input;
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 

using System.IO.IsolatedStorage;
  
namespace ChangeQuota { 

   public partial class MainPage : UserControl { 
	
      public MainPage() { 
         InitializeComponent(); 
      } 
	  
      private void increaseQuota_Click(object sender, RoutedEventArgs e) { 
         using (IsolatedStorageFile isoStore = 
            IsolatedStorageFile.GetUserStoreForApplication()) { 
               long newQuota = isoStore.Quota + 10240; 
					
               if (isoStore.IncreaseQuotaTo(newQuota)) { 
                  infoText.Text = "Quota is " + isoStore.Quota + ", free space: " + 
                  isoStore.AvailableFreeSpace; 
               } else { 
                  infoText.Text = "Meanie!"; 
               } 
         } 
      } 
   } 
}

Ketika kode di atas dikompilasi dan dijalankan, Anda akan melihat output berikut.

Saat Anda mengklik Increase, prompt muncul. Itu meminta untuk meningkatkanQuota menjadi 10 KB lebih besar dari apa pun yang sudah ada.

Saat Anda mengklik Yes, lalu mencetak jumlah Kuota yang tersedia.

Kami menyarankan Anda untuk menjalankan contoh di atas untuk pemahaman yang lebih baik.