예제 #1
0
 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 {}
     }
 }
예제 #2
0
        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;
        }