/// <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); }
/// <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() }); }