Example #1
0
        /// <summary>
        /// 拦截器
        /// </summary>
        /// <param name="invocation"></param>
        public void Intercept(IInvocation invocation)
        {
            MethodInfo methodInfo = null;

            try
            {
                methodInfo = invocation.MethodInvocationTarget;
                if (methodInfo == null)
                {
                    methodInfo = invocation.Method;
                }

                // 执行方法
                invocation.Proceed();
            }
            catch (Exception ex)
            {
                // 书写异常日志
                NGPExceptionLog error = new NGPExceptionLog
                {
                    ApiUrl         = _workContext.CurrentRequest.Url,
                    Parameters     = _workContext.CurrentRequest.Parameter,
                    BusinessMethod = string.Format("{0}.{1}.{2}",
                                                   methodInfo.ReflectedType.Namespace,
                                                   methodInfo.ReflectedType.Name,
                                                   methodInfo.Name),
                    ExceptionContent = string.IsNullOrEmpty(ex.Message) ?
                                       (ex.InnerException != null ? ex.InnerException.Message : "Unknow Error")
                                            : ex.Message,
                    OperatedBy   = _workContext.Current != null ? _workContext.Current.EmplId : string.Empty,
                    OperatedDept = _workContext.Current != null ? _workContext.Current.DeptId : string.Empty,
                    Exception    = ex
                };
                _logPublisher.RegisterError(error);

                // 设定返回值
                INGPResponse response = invocation.ReturnValue as INGPResponse;
                if (response == null)
                {
                    response = Activator.CreateInstance(methodInfo.ReturnType) as INGPResponse;
                }
                response.Message   = CommonResource.OperatorException;
                response.Status    = OperateStatus.Error;
                response.ErrorCode = ErrorCode.SystemError;

                invocation.ReturnValue = response;
            }
        }
Example #2
0
        /// <summary>
        /// 处理操作
        /// </summary>
        /// <param name="request">请求参数</param>
        /// <param name="ctx">上下文参数</param>
        /// <returns>返回处理结果</returns>
        public virtual INGPResponse HandleProcess(INGPRequest request, TContext ctx)
        {
            INGPResponse result = null;

            do
            {
                // 当前执行结果
                result = Process(request, ctx);

                IProcessCommand <TContext> step = null;
                if (!_steps.TryDequeue(out step) || step == null)
                {
                    break;
                }

                var nextRequest = result as INGPRequest;
                step.HandleProcess(nextRequest, ctx);
            }while (_steps.Count > 0);

            return(result);
        }