private void executeWithBasicExceptionHandling(Action handler, bool setErrorInRequestState, bool set500StatusCode) { try { handler(); } catch (Exception e) { // Suppress all exceptions since there is no way to report them and in some cases they could wreck the control flow for the request. try { StandardLibraryMethods.CallEveryMethod( delegate { const string prefix = "An exception occurred that could not be handled by the main exception handler:"; if (setErrorInRequestState) { RequestState.SetError(prefix, e); } else { AppTools.EmailAndLogError(prefix, e); } }, delegate { if (set500StatusCode) { this.set500StatusCode("Exception"); } }); } catch {} } }
private void cleanUpDatabaseConnectionsAndExecuteNonTransactionalModificationMethods(bool skipNonTransactionalModificationMethods = false) { var methods = new List <Action>(); if (primaryDatabaseConnectionInitialized) { methods.Add(() => cleanUpDatabaseConnection(DataAccessState.Current.PrimaryDatabaseConnection)); } foreach (var databaseName in secondaryDatabasesWithInitializedConnections) { var databaseNameCopy = databaseName; methods.Add(() => cleanUpDatabaseConnection(DataAccessState.Current.GetSecondaryDatabaseConnection(databaseNameCopy))); } methods.Add( () => { try { if (!skipNonTransactionalModificationMethods && !transactionMarkedForRollback) { DataAccessState.Current.DisableCache(); try { foreach (var i in nonTransactionalModificationMethods) { i(); } } finally { DataAccessState.Current.ResetCache(); } } } finally { nonTransactionalModificationMethods.Clear(); } }); StandardLibraryMethods.CallEveryMethod(methods.ToArray()); transactionMarkedForRollback = false; }