示例#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;
                }
            }
        }