Beispiel #1
0
        public override async Task InvokeAsync(RpcContext context, RpcRequestDelegate next)
        {
            Console.WriteLine($"LoggerFilter begin,Parameters={context.Parameters[0].ToJson()}");
            await next(context);

            Console.WriteLine($"LoggerFilter end,ReturnValue={context.ReturnValue.ToJson()}");
        }
Beispiel #2
0
        public override async Task InvokeAsync(RpcContext context, RpcRequestDelegate next)
        {
            Debug.WriteLine($"CacheFilter begin,Parameters={context.Parameters}");
            await next(context);

            Debug.WriteLine($"CacheFilter end,ReturnValue={context.ReturnValue.ToJson()}");
        }
        /// <summary>
        /// 处理请求
        /// </summary>
        /// <returns></returns>
        private async Task HandleRequest(HttpContext context, RequestModel requestModel)
        {
            Type serviceType     = _types[requestModel.TypeFullName];
            var  instance        = context.RequestServices.GetService(serviceType);
            var  instanceType    = instance.GetType();
            var  method          = instanceType.GetMethod(requestModel.MethodName);
            var  methodParamters = method.GetParameters();
            var  paramters       = requestModel.Paramters;

            for (int i = 0; i < paramters.Length; i++)
            {
                if (paramters[i].GetType() != methodParamters[i].ParameterType)
                {
                    paramters[i] = paramters[i].ToJson().FromJson(methodParamters[i].ParameterType);
                }
            }
            RpcContext aspectContext = new RpcContext
            {
                Parameters  = paramters,
                HttpContext = context,
                TargetType  = instanceType,
                Method      = method
            };
            AspectPiplineBuilder aspectPipline      = CreatPipleline(aspectContext);
            RpcRequestDelegate   rpcRequestDelegate = aspectPipline.Build(PiplineEndPoint(instance, aspectContext));

            await rpcRequestDelegate(aspectContext);
        }
Beispiel #4
0
        public RpcRequestDelegate Build(RpcRequestDelegate _complete)
        {
            var invoke = _complete;

            foreach (var component in _components.Reverse())
            {
                invoke = component(invoke);
            }
            return(invoke);
        }
Beispiel #5
0
 public abstract Task InvokeAsync(RpcContext context, RpcRequestDelegate next);