Пример #1
0
        public CacheItem GetCacheItem(string key)
        {
            return(Retry(() => {
                var hash = GetCacheItemFileHash(key);
                lock (String.Intern(hash)) {
                    var filename = _appDataFolder.Combine(_metadata, hash);

                    if (!_appDataFolder.FileExists(filename))
                    {
                        return null;
                    }

                    CacheItem cacheItem = null;

                    using (var stream = _appDataFolder.OpenFile(filename)) {
                        if (stream == null)
                        {
                            return null;
                        }

                        cacheItem = DeserializeMetadata(stream);

                        // We compare the requested key and the one stored in the metadata
                        // as there could be key collisions with the hashed filenames.
                        if (!cacheItem.CacheKey.Equals(key))
                        {
                            return null;
                        }
                    }

                    filename = _appDataFolder.Combine(_content, hash);
                    using (var stream = _appDataFolder.OpenFile(filename)) {
                        if (stream == null)
                        {
                            return null;
                        }

                        using (var ms = new MemoryStream()) {
                            stream.CopyTo(ms);
                            cacheItem.Output = ms.ToArray();
                        }
                    }

                    return cacheItem;
                }
            }));
        }
        public CacheItem GetCacheItem(string key)
        {
            return(Retry(() => {
                var filename = GetCacheItemFilename(key);

                if (!_appDataFolder.FileExists(filename))
                {
                    return null;
                }

                using (var stream = _appDataFolder.OpenFile(filename)) {
                    if (stream == null)
                    {
                        return null;
                    }

                    return Deserialize(stream);
                }
            }));
        }
Пример #3
0
        private ConfigurationCache ReadConfiguration(string hash)
        {
            if (!_hostEnvironment.IsFullTrust)
            {
                return(null);
            }

            var pathName = GetPathName(_shellSettings.Name);

            if (!_appDataFolder.FileExists(pathName))
            {
                return(null);
            }

            try
            {
                var formatter = new BinaryFormatter();
                using (var stream = _appDataFolder.OpenFile(pathName))
                {
                    // if the stream is empty, stop here
                    if (stream.Length == 0)
                    {
                        return(null);
                    }

                    var oldHash = (string)formatter.Deserialize(stream);
                    if (hash != oldHash)
                    {
                        Logger.Information("The cached NHibernate configuration is out of date. A new one will be re-generated.");
                        return(null);
                    }

                    var oldConfig = (Configuration)formatter.Deserialize(stream);

                    return(new ConfigurationCache
                    {
                        Hash = oldHash,
                        Configuration = oldConfig
                    });
                }
            }
            catch (Exception e)
            {
                for (var scan = e; scan != null; scan = scan.InnerException)
                {
                    Logger.Warning("Error reading the cached NHibernate configuration: {0}", scan.Message);
                }
                Logger.Information("A new one will be re-generated.");
                return(null);
            }
        }
        public async Task <bool> TryWriteDataAsync(string blockName, string data)
        {
            IAppDataFolder folder = _dataFolderFactory();
            string         file   = $@"DebugDistributedStore/{blockName}.txt";

            using (Stream stream = folder.OpenFile(file))
            {
                using (var streamWriter = new StreamWriter(stream))
                {
                    streamWriter.Write(data);
                }
            }

            return(await Task.FromResult(true));
        }
Пример #5
0
        public void Sweep()
        {
            foreach (var filename in _appDataFolder.ListFiles(_root).ToArray())
            {
                var validUntilUtc = _cacheManager.Get(filename, context => {
                    _signals.When(filename);

                    using (var stream = _appDataFolder.OpenFile(filename)) {
                        var cacheItem = FileSystemOutputCacheStorageProvider.Deserialize(stream);
                        return(cacheItem.ValidUntilUtc);
                    }
                });

                if (_clock.UtcNow > validUntilUtc)
                {
                    _appDataFolder.DeleteFile(filename);
                    _signals.Trigger(filename);
                }
            }
        }
        public void Sweep()
        {
            foreach (var filename in _appDataFolder.ListFiles(_metadata).ToArray())
            {
                var hash = Path.GetFileName(filename);

                var validUntilUtc = _cacheManager.Get(hash, context => {
                    _signals.When(hash);

                    using (var stream = _appDataFolder.OpenFile(filename)) {
                        var cacheItem = FileSystemOutputCacheStorageProvider.DeserializeMetadata(stream);
                        return(cacheItem.ValidUntilUtc);
                    }
                });

                if (_clock.UtcNow > validUntilUtc)
                {
                    _appDataFolder.DeleteFile(_appDataFolder.Combine(_metadata, hash));
                    _appDataFolder.DeleteFile(_appDataFolder.Combine(_content, hash));
                    _signals.Trigger(filename);
                }
            }
        }
Пример #7
0
 public override void Load()
 {
     using (var stream = _appDataFolder.OpenFile(Path)) {
         Load(stream);
     }
 }