public void Intercept(IInvocation invocation)
        {
            var methodName     = invocation.Method.Name;
            var lockAttributes = invocation.Method.GetCustomAttributes(typeof(LockAttribute), true) as LockAttribute[];


            if (IsMarkLockLockAttribute(lockAttributes))
            {
                var lockProviders = GetLockProviders(lockAttributes);
                try
                {
                    foreach (var lockProvider in lockProviders)
                    {
                        lockProvider.AddLock();
                    }
                    invocation.Proceed();
                }
                catch (Exception e)
                {
                    _log.Exception("Something wrong!", e);
                    throw e;
                }
                finally {
                    foreach (var lockProvider in lockProviders)
                    {
                        lockProvider.ReleaseLock();
                    }
                    _log.Info($"{DateTime.Now:HH:mm:ss fff} {methodName} Release Lock");
                }
            }
            else
            {
                invocation.Proceed();
            }
        }
示例#2
0
        protected void Application_Error(object sender, EventArgs e)
        {
            log.Info("Application Error");

            Exception exception = Server.GetLastError();

            Server.ClearError();
            Response.Clear();

            log.Exception(exception);

            if (!IsAjaxRequest())
            {
                Response.Redirect("/Views/Shared/Error.cshtml");
            }
            else
            {
                Response.Write("Server Error, could not continue.");
            }
        }