public virtual IMessageLite OnExecute(IClientContext client, RpcRequestHeader requestHeader,
                                              CodedInputStream input, RpcResponseHeader.Builder responseHeader)
        {
            RpcCallContext previous = RpcCallContext.g_current;

            try
            {
                responseHeader.SetMessageId(requestHeader.MessageId);
                requestHeader.CallContext.Client = client;
                RpcCallContext.g_current         = requestHeader.CallContext;

                IMessageLite responseBody = CallMethod(requestHeader, input);

                if (RpcCallContext.g_current != null && !requestHeader.CallContext.Equals(RpcCallContext.g_current))
                {
                    responseHeader.SetCallContext(RpcCallContext.g_current);
                }

                return(responseBody);
            }
            catch (Exception ex)
            {
                OnException(requestHeader, responseHeader, ex);
                return(RpcVoid.DefaultInstance);
            }
            finally
            {
                RpcCallContext.g_current = previous;
            }
        }
Ejemplo n.º 2
0
        public ServiceResponse RpcService(RpcCallContext context, ServiceRequest request, Action <object> responseAction)
        {
            requestTrace(request);
            var service = RpcServiceStore.Instance.GetServiceRegistData(request.ServiceData);
            var result  = doRsfService(service, request, responseAction, context);

            return(result);
        }
Ejemplo n.º 3
0
 protected RpcClient()
 {
     _exceptionTypeResolution = RpcErrorTypeBehavior.OnlyUseLoadedAssemblies;
     _extensions          = ExtensionRegistry.CreateInstance();
     _callContext         = RpcCallContext.CreateBuilder();
     _authenticatedAs     = RpcAuthenticationType.None;
     _serverPrincipalName = null;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 服务执行
        /// </summary>
        /// <param name="metadata"></param>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        private object doExcute(ServiceRegistData service, ServiceRequest request, Action <object> responseAction, RpcCallContext context)
        {
            var typeParams = new List <object>();

            typeParams.Add(service);
            typeParams.Add(request);
            typeParams.Add(context);
            if (context?.ServerCallContext != null)
            {
                typeParams.Add(context.ServerCallContext);
            }


            var paramValue = context?.PeerAddress?.IpAddress;

            var nameParams = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase);

            if (!string.IsNullOrWhiteSpace(paramValue))
            {
                nameParams.Add("ip", paramValue);
            }
            else
            {
                nameParams.Add("ip", "127.0.0.1");
            }
            var result = XRunner.Invoke(service.ServiceImpl, request.ServiceData.ServiceMethod, request.ServiceData.ServiceParam, nameParams, typeParams, responseAction);

            return(result);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 服务执行
        /// </summary>
        /// <param name="metadata"></param>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public object Excute(ServiceRegistData service, ServiceRequest request, Action <object> responseAction, RpcCallContext context)
        {
            var result = doExcute(service, request, responseAction, context);

            return(result);
        }
Ejemplo n.º 6
0
 private ServiceResponse doRsfService(ServiceRegistData service, ServiceRequest request, Action <object> responseAction, RpcCallContext context, ServiceHandlerHelper handler)
 {
     try
     {
         sendMsg(context, $"RPC   Start>>[{request.TraceData.RequestId}.{request.TraceData.TraceId}]>>[{request.ServiceData.ServiceInfc}].[{request.ServiceData.ServiceMethod}]");
         request = handler.ServerRequest(request);
         var result = doExcuteService(service, request, responseAction, context);
         return(ResponseHelper.Instance.GetResponse(service, request, result, null));
     }
     catch (Exception ex)
     {
         return(ResponseHelper.Instance.GetResponse(service, request, null, ex));
     }
 }
Ejemplo n.º 7
0
 private ServiceResponse doRsfService(ServiceRegistData service, ServiceRequest request, Action <object> responseAction, RpcCallContext context)
 {
     try
     {
         var handler = new ServiceHandlerHelper(service);
         var result  = doRsfService(service, request, responseAction, context, handler);
         return(handler.ServerResponse(request, result));
     }
     catch (Exception ex)
     {
         return(ResponseHelper.Instance.GetResponse(service, request, null, ex));
     }
 }
Ejemplo n.º 8
0
 private void sendMsg(RpcCallContext context, string msg)
 {
 }
Ejemplo n.º 9
0
        /// <summary>
        /// 服务执行
        /// </summary>
        /// <param name="metadata"></param>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        private object doExcuteService(ServiceRegistData service, ServiceRequest request, Action <object> responseAction, RpcCallContext context)
        {
            var method = new RpcMethodExcute();
            var result = method.Excute(service, request, responseAction, context);

            return(result);
        }
Ejemplo n.º 10
0
        public RpcCallContext ConvertParam(ServerCallContext context)
        {
            var rpcContext = new RpcCallContext(context.Method, context.Host, context.Peer, context);

            return(rpcContext);
        }