コード例 #1
0
        /// <summary>
        /// Had to move azure role initialization here
        /// See http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/10d042da-50b1-4930-b0c0-aff22e4144f9 
        /// and http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/ab6d56dc-154d-4aba-8bde-2b7f7df121c1/#89264b8c-7e25-455a-8fd6-20f547ab545b
        /// </summary>
        protected void Application_BeginRequest()
        {
            //-- Search index is updated every hour + time taken to build cache and index on the cache server
            var indexNeedsUpdating = lastIndexRefresh.HasValue && lastIndexRefresh > DateTime.UtcNow.AddMinutes(65);

            if (_initialized && !indexNeedsUpdating)
            {
                return;
            }

            lock (_gate)
            {
                if (!_initialized)
                {
                    InitializeEnvironmentCacheAndSearchProviders();
                    _initialized = true;
                }
                else if (indexNeedsUpdating)
                {
                    _siteSearchEngine.Dispose();
                    var connectionString = ConfigurationManager.ConnectionStrings["CfCloudStorage"].ConnectionString;
                    var cloudStorage = CloudStorageAccount.Parse(connectionString);
                    var dir = new Lucene.Net.Store.Azure.AzureDirectory(cloudStorage, "SearchCatalog", new RAMDirectory());
                    _siteSearchEngine = new CfLuceneIndexSearcher(dir);
                    Mail.MailMan.SendAppEvent(TraceCode.AppBuildSearchIndex, "Search index reloaded", "", Stgs.JskID, "*****@*****.**", false);
                    lastIndexRefresh = DateTime.UtcNow;
                }
            }
        }
コード例 #2
0
        private void InitializeEnvironmentCacheAndSearchProviders()
        {
            CfTrace.Current.Information(TraceCode.AppBuildSearchIndex, "Started {0:MMM dd HH.mm.ss}", DateTime.Now);

            if (!RoleEnvironment.IsAvailable)
            {
                CfCacheIndex.Initialize();
                CfPerfCache.Initialize();

                new SearchManager().BuildIndex(null);
                var directoryPath = AppDomain.CurrentDomain.BaseDirectory + @"App_Data\";
                var dir = Lucene.Net.Store.FSDirectory.Open(new System.IO.DirectoryInfo(directoryPath));

                _siteSearchEngine = new CfLuceneIndexSearcher(dir);
            }
            else
            {
                CfCacheIndex.Initialize(new Level2MemcachedCacheIndex());
                CfPerfCache.Initialize(new Level2MemcachedPerfCache());

                var connectionString = ConfigurationManager.ConnectionStrings["CfCloudStorage"].ConnectionString;
                var cloudStorage = CloudStorageAccount.Parse(connectionString);
                var dir = new Lucene.Net.Store.Azure.AzureDirectory(cloudStorage, "SearchCatalog", new RAMDirectory());
                _siteSearchEngine = new CfLuceneIndexSearcher(dir);

                lastIndexRefresh = DateTime.UtcNow;
            }

            CfTrace.Current.Information(TraceCode.AppBuildSearchIndex, "Ended {0:MMM dd HH.mm.ss}", DateTime.Now);
        }