/// <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; } } }
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); }