/// <summary>
        /// Adds new item to persistence store
        /// </summary>
        /// <param name="storageKey">Unique key for storage item.</param>
        /// <param name="newItem">Item to be added to cache. May not be null.</param>
        protected override void AddNewItem(int storageKey,
                                           CacheItem newItem)
        {
            string key = newItem.Key;
            byte[] valueBytes = SerializationUtility.ToBytes(newItem.Value);
            if (encryptionProvider != null)
            {
                valueBytes = encryptionProvider.Encrypt(valueBytes);
            }

            byte[] expirationBytes = SerializationUtility.ToBytes(newItem.GetExpirations());
            byte[] refreshActionBytes = SerializationUtility.ToBytes(newItem.RefreshAction);
            CacheItemPriority scavengingPriority = newItem.ScavengingPriority;
            DateTime lastAccessedTime = newItem.LastAccessedTime;

            DbCommand insertCommand = database.GetStoredProcCommand("AddItem");
            database.AddInParameter(insertCommand, "@partitionName", DbType.String, partitionName);
            database.AddInParameter(insertCommand, "@storageKey", DbType.Int32, storageKey);
            database.AddInParameter(insertCommand, "@key", DbType.String, key);
            database.AddInParameter(insertCommand, "@value", DbType.Binary, valueBytes);
            database.AddInParameter(insertCommand, "@expirations", DbType.Binary, expirationBytes);
            database.AddInParameter(insertCommand, "@refreshAction", DbType.Binary, refreshActionBytes);
            database.AddInParameter(insertCommand, "@scavengingPriority", DbType.Int32, scavengingPriority);
            database.AddInParameter(insertCommand, "@lastAccessedTime", DbType.DateTime, lastAccessedTime);

            database.ExecuteNonQuery(insertCommand);
        }
Exemple #2
0
        /// <summary>
        /// Adds new item to persistence store
        /// </summary>
        /// <param name="storageKey">Unique key for storage item.</param>
        /// <param name="newItem">Item to be added to cache. May not be null.</param>
        protected override void AddNewItem(int storageKey, CacheItem newItem)
        {
            string key = newItem.Key;

            byte[] valueBytes = SerializationUtility.ToBytes(newItem.Value);
            if (this.encryptionProvider != null)
            {
                valueBytes = this.encryptionProvider.Encrypt(valueBytes);
            }

            byte[]            expirationBytes    = SerializationUtility.ToBytes(newItem.GetExpirations());
            byte[]            refreshActionBytes = SerializationUtility.ToBytes(newItem.RefreshAction);
            CacheItemPriority scavengingPriority = newItem.ScavengingPriority;
            DateTime          lastAccessedTime   = newItem.LastAccessedTime;

            DbCommand insertCommand = database.GetStoredProcCommand("AddItem");

            database.AddInParameter(insertCommand, "@partitionName", DbType.String, partitionName);
            database.AddInParameter(insertCommand, "@storageKey", DbType.Int32, storageKey);
            database.AddInParameter(insertCommand, "@key", DbType.String, key);
            database.AddInParameter(insertCommand, "@value", DbType.Binary, valueBytes);
            database.AddInParameter(insertCommand, "@expirations", DbType.Binary, expirationBytes);
            database.AddInParameter(insertCommand, "@refreshAction", DbType.Binary, refreshActionBytes);
            database.AddInParameter(insertCommand, "@scavengingPriority", DbType.Int32, scavengingPriority);
            database.AddInParameter(insertCommand, "@lastAccessedTime", DbType.DateTime, lastAccessedTime);

            database.ExecuteNonQuery(insertCommand);
        }
 /// <summary>
 /// Stores specified CacheItem into IsolatedStorage at location specified in constructor
 /// </summary>
 /// <param name="itemToStore">The <see cref="CacheItem"/> to store.</param>
 public void Store(CacheItem itemToStore)
 {
     keyField.Write(itemToStore.Key, false);
     valueField.Write(itemToStore.Value, true);
     scavengingPriorityField.Write(itemToStore.ScavengingPriority, false);
     refreshActionField.Write(itemToStore.RefreshAction, false);
     expirationsField.Write(itemToStore.GetExpirations(), false);
     lastAccessedField.Write(itemToStore.LastAccessedTime, false);
 }
Exemple #4
0
 /// <summary>
 /// Stores specified CacheItem into IsolatedStorage at location specified in constructor
 /// </summary>
 /// <param name="itemToStore">The <see cref="CacheItem"/> to store.</param>
 public void Store(CacheItem itemToStore)
 {
     keyField.Write(itemToStore.Key, false);
     valueField.Write(itemToStore.Value, true);
     scavengingPriorityField.Write(itemToStore.ScavengingPriority, false);
     refreshActionField.Write(itemToStore.RefreshAction, false);
     expirationsField.Write(itemToStore.GetExpirations(), false);
     lastAccessedField.Write(itemToStore.LastAccessedTime, false);
 }
Exemple #5
0
        public void ReadCacheItemWithOneExpirationAction()
        {
            CacheItem itemToStore = new CacheItem("monkey", "baboon", CacheItemPriority.NotRemovable, null, new NeverExpired());
            CacheItem readItem    = DoCacheItemRoundTripToStorage(itemToStore, false);

            ICacheItemExpiration[] expirations = readItem.GetExpirations();
            Assert.AreEqual(1, expirations.Length);
            Assert.AreEqual(typeof(NeverExpired), expirations[0].GetType());
        }
Exemple #6
0
        public void CtorForLoadingInitializesExpirationsToMatchLastAccessedTime()
        {
            DateTime historicalTimestamp = DateTime.Now - TimeSpan.FromHours(1.0);
            CacheItem item = new CacheItem(historicalTimestamp, "foo", "bar", CacheItemPriority.NotRemovable, null,
                                           new SlidingTime(TimeSpan.FromHours(17.0), DateTime.Now));

            ICacheItemExpiration[] expirations = item.GetExpirations();
            SlidingTime expiration = expirations[0] as SlidingTime;
            Assert.AreEqual(historicalTimestamp, expiration.TimeLastUsed);
        }
Exemple #7
0
        public void CtorForLoadingInitializesExpirationsToMatchLastAccessedTime()
        {
            DateTime  historicalTimestamp = DateTime.Now - TimeSpan.FromHours(1.0);
            CacheItem item = new CacheItem(historicalTimestamp, "foo", "bar", CacheItemPriority.NotRemovable, null,
                                           new SlidingTime(TimeSpan.FromHours(17.0), DateTime.Now));

            ICacheItemExpiration[] expirations = item.GetExpirations();
            SlidingTime            expiration  = expirations[0] as SlidingTime;

            Assert.AreEqual(historicalTimestamp, expiration.TimeLastUsed);
        }
Exemple #8
0
        public void ReadCacheItemWithThreeExpirationActions()
        {
            CacheItem itemToStore = new CacheItem("monkey", "baboon", CacheItemPriority.NotRemovable, null,
                                                  new NeverExpired(), new AlwaysExpired(), new AbsoluteTime(TimeSpan.FromSeconds(1.0)));
            CacheItem readItem = DoCacheItemRoundTripToStorage(itemToStore, false);

            ICacheItemExpiration[] expirations = readItem.GetExpirations();
            Assert.AreEqual(3, expirations.Length);
            Assert.AreEqual(typeof(NeverExpired), expirations[0].GetType());
            Assert.AreEqual(typeof(AlwaysExpired), expirations[1].GetType());
            Assert.AreEqual(typeof(AbsoluteTime), expirations[2].GetType());
        }
Exemple #9
0
        public void DataCanBeRetrievedWithNoEncryptionProvider()
        {
            unencryptedBackingStore.Add(new CacheItem("key", "value", CacheItemPriority.Normal, new MockRefreshAction(), new AlwaysExpired()));

            Hashtable dataInCache = unencryptedBackingStore.Load();

            CacheItem retrievedItem = (CacheItem)dataInCache["key"];

            Assert.AreEqual("key", retrievedItem.Key);
            Assert.AreEqual("value", retrievedItem.Value);
            Assert.AreEqual(CacheItemPriority.Normal, retrievedItem.ScavengingPriority);
            Assert.AreEqual(typeof(MockRefreshAction), retrievedItem.RefreshAction.GetType());
            Assert.AreEqual(typeof(AlwaysExpired), retrievedItem.GetExpirations()[0].GetType());
        }
Exemple #10
0
        /// <summary>
        /// Stores specified CacheItem into IsolatedStorage at location specified in constructor
        /// </summary>
        /// <param name="itemToStore">The <see cref="CacheItem"/> to store.</param>
        public void Store(CacheItem itemToStore)
        {
            if (itemToStore == null)
            {
                throw new ArgumentNullException("itemToStore");
            }

            keyField.Write(itemToStore.Key, false);
            valueField.Write(itemToStore.Value, true);
            scavengingPriorityField.Write(itemToStore.ScavengingPriority, false);
            refreshActionField.Write(itemToStore.RefreshAction, false);
            expirationsField.Write(itemToStore.GetExpirations(), false);
            lastAccessedField.Write(itemToStore.LastAccessedTime, false);
        }
        public void CanLoadOneItemFromTable()
        {
            RefreshAction refreshAction = new RefreshAction();
            CacheItem     addedItem     = new CacheItem("key", "value", CacheItemPriority.NotRemovable,
                                                        refreshAction,
                                                        new SlidingTime(TimeSpan.FromHours(1)), new AbsoluteTime(TimeSpan.FromHours(1.0)));

            backingStore.Add(addedItem);

            Hashtable retrievedData = backingStore.Load();

            Assert.AreEqual(1, retrievedData.Count);

            CacheItem item = (CacheItem)retrievedData["key"];

            Assert.AreEqual("key", item.Key);
            Assert.AreEqual("value", item.Value);
            Assert.AreEqual(CacheItemPriority.NotRemovable, item.ScavengingPriority);
            Assert.AreEqual(typeof(RefreshAction), item.RefreshAction.GetType());
            Assert.IsFalse(Object.ReferenceEquals(refreshAction, item.RefreshAction));
            Assert.AreEqual(2, item.GetExpirations().Length);
            Assert.AreEqual(typeof(SlidingTime), item.GetExpirations()[0].GetType());
            Assert.AreEqual(typeof(AbsoluteTime), item.GetExpirations()[1].GetType());
        }
Exemple #12
0
        void ReadMinimalCacheItemFromIsolatedStorageEncrypted(bool encrypted)
        {
            DateTime historicalTimestamp = DateTime.Now - TimeSpan.FromHours(1.0);

            CacheItem itemToStore = new CacheItem("key1", "value1", CacheItemPriority.Normal, null);

            itemToStore.SetLastAccessedTime(historicalTimestamp);

            CacheItem readItem = DoCacheItemRoundTripToStorage(itemToStore, encrypted);

            Assert.AreEqual("key1", readItem.Key);
            Assert.AreEqual("value1", readItem.Value);
            Assert.AreEqual(CacheItemPriority.Normal, readItem.ScavengingPriority);
            Assert.IsNull(readItem.RefreshAction);
            ICacheItemExpiration[] expirations = readItem.GetExpirations();
            Assert.AreEqual(0, expirations.Length);
            Assert.AreEqual(historicalTimestamp, readItem.LastAccessedTime);
        }
Exemple #13
0
        public void DecryptedDataCanBeReadBackFromDatabase()
        {
            IStorageEncryptionProvider encryptionProvider = null;

            encryptionProvider = EnterpriseLibraryFactory.BuildUp <IStorageEncryptionProvider>("Fred");

            DataBackingStore encryptingBackingStore = new DataBackingStore(db, "encryptionTests", encryptionProvider);

            encryptingBackingStore.Add(new CacheItem("key", "value", CacheItemPriority.Normal, new MockRefreshAction(), new AlwaysExpired()));
            Hashtable dataInCache = encryptingBackingStore.Load();

            CacheItem retrievedItem = (CacheItem)dataInCache["key"];

            Assert.AreEqual("key", retrievedItem.Key);
            Assert.AreEqual("value", retrievedItem.Value);
            Assert.AreEqual(CacheItemPriority.Normal, retrievedItem.ScavengingPriority);
            Assert.AreEqual(typeof(MockRefreshAction), retrievedItem.RefreshAction.GetType());
            Assert.AreEqual(typeof(AlwaysExpired), retrievedItem.GetExpirations()[0].GetType());
        }