コード例 #1
0
        /// <summary>
        /// 对服务请求进行处理,根据路由信息调用合适的服务实现
        /// </summary>
        /// <param name="context">服务上下文,每次服务调用共享一个实例</param>
        /// <returns></returns>
        public override async Task <ServiceProcessResult> ProcessAsync(ServiceContext context)
        {
            logger.LogInformation($"Service request process beginning. ServiceId={context.Route.ServiceId}, ActionId={context.Route.ActionId}");

            if (!context.Route.Enabled)
            {
                logger.LogError($"Route is disabled. ServiceId={context.Route.ServiceId}, ActionId={context.Route.ActionId}");
                return(ServiceProcessorUtils.CreateServiceExceptionResult(ServiceExceptionKeys.SERVICE_DISABLED_ERROR, ProtocolStackFactory));
            }

            if (Serializer == null || ServiceInvoker == null)
            {
                logger.LogError($"Service has configuration error. ServiceId={context.Route.ServiceId}, ActionId={context.Route.ActionId}");
                return(ServiceProcessorUtils.CreateServiceExceptionResult(ServiceExceptionKeys.SERVER_CONFIG_ERROR, ProtocolStackFactory));
            }

            var result = new ServiceProcessResult()
            {
                ServiceResponse = ProtocolStackFactory.CreateServiceResponse()
            };

            try
            {
                result.ServiceResponse.ReturnValue = await ServiceInvoker.Invoke(Serializer, context.Route, context.ActionParamList);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"ServiceInvoker.Invoke has error, ServiceId={context.Route.ServiceId}, ActionId={context.Route.ActionId}, ExceptionMessage={ex.Message}");
                return(ServiceProcessorUtils.CreateServiceExceptionResult(ServiceExceptionKeys.SERVICE_INVOKE_ERROR, ProtocolStackFactory));
            }

            logger.LogInformation($"Service request process finished. ServiceId={context.Route.ServiceId}, ActionId={context.Route.ActionId}");

            return(result);
        }
コード例 #2
0
        /// <summary>
        /// 服务授权验证
        /// </summary>
        /// <param name="context">服务上下文,每次服务调用共享一个实例</param>
        /// <returns></returns>
        public override async Task <ServiceProcessResult> ProcessAsync(ServiceContext context)
        {
            try
            {
                await serviceAuthorizer.Validate(context, context.Route.ServiceId, context.Route.ActionId, context.Attachments);
            }
            catch (ServiceAuthorizeException ex)
            {
                logger.LogError(ex, $"Service authorize failed. ServiceId={context.Route.ServiceId}, ActionId={context.Route.ActionId}, Identity={context.Identity}, Remote={context.RemoteAddress.Address.ToIPString()}, Message={ex.Message}");
                switch (ex.ServiceAuthorizeExceptionType)
                {
                case ServiceAuthorizeExceptionType.NoAuthorize:
                    return(ServiceProcessorUtils.CreateServiceExceptionResult(ServiceExceptionKeys.SERVICE_NO_AUTHORIZE, ProtocolStackFactory));

                case ServiceAuthorizeExceptionType.DateLimit:
                    return(ServiceProcessorUtils.CreateServiceExceptionResult(ServiceExceptionKeys.SERVICE_DATE_LIMIT, ProtocolStackFactory));

                case ServiceAuthorizeExceptionType.TimeLimit:
                    return(ServiceProcessorUtils.CreateServiceExceptionResult(ServiceExceptionKeys.SERVICE_TIME_LIMIT, ProtocolStackFactory));

                default:
                    return(ServiceProcessorUtils.CreateServiceExceptionResult(ServiceExceptionKeys.SERVICE_NO_AUTHORIZE, ProtocolStackFactory));
                }
            }
            catch (Exception ex)
            {
                logger.LogError(ex, $"Service authorize has error. ServiceId={context.Route.ServiceId}, ActionId={context.Route.ActionId}, Identity={context.Identity}, Remote={context.RemoteAddress.Address.ToIPString()}, ExceptionMessage={ex.Message}");
                return(ServiceProcessorUtils.CreateSystemExceptionResult(SystemExceptionKeys.SYSTEM_ERROR, ProtocolStackFactory));
            }

            if (Next != null)
            {
                return(await Next.ProcessAsync(context));
            }
            return(new ServiceProcessResult()
            {
                ServiceResponse = ProtocolStackFactory.CreateServiceResponse()
            });
        }