Exemplo n.º 1
0
        private ServiceProxyInfo CreateServiceProxyInfo(Type serviceProxyType,
                                                        MethodInfo actionProxyType,
                                                        string proxyName,
                                                        int serviceId,
                                                        string serviceName,
                                                        bool serviceEnabled,
                                                        int actionId,
                                                        string actionName,
                                                        bool actionEnabled,
                                                        int actionTimeout)
        {
            var proxyInfo = new ServiceProxyInfo()
            {
                ProxyName        = proxyName,
                ServiceId        = serviceId,
                ActionId         = actionId,
                ServiceName      = serviceName,
                ActionName       = actionName,
                Timeout          = actionTimeout,
                ServiceProxyType = serviceProxyType,
                ActionProxyType  = actionProxyType,
                ReturnType       = GetReturnType(actionProxyType),
                Enabled          = serviceEnabled && actionEnabled
            };

            return(proxyInfo);
        }
Exemplo n.º 2
0
 /// <summary>
 /// 添加Action
 /// </summary>
 /// <param name="serviceProxyInfo">服务代理信息</param>
 private void AddAction(ServiceProxyInfo serviceProxyInfo)
 {
     if (serviceProxyInfoList.ContainsKey(serviceProxyInfo.ActionProxyType))
     {
         throw new InvalidOperationException($"ActionType has exist. ProxyName={ProxyName}, ActionType={serviceProxyInfo.ActionProxyType}");
     }
     serviceProxyInfo.ProxyName = ProxyName;
     serviceProxyInfoList.Add(serviceProxyInfo.ActionProxyType, serviceProxyInfo);
     logger.LogInformation($"Add action success. ProxyName={ProxyName}, ServiceId={serviceProxyInfo.ServiceId}, ActionId={serviceProxyInfo.ActionId}, Enabled={serviceProxyInfo.Enabled}, Timeout={serviceProxyInfo.Timeout}, ActionProxyType={serviceProxyInfo.ActionProxyType}, ReturnType={serviceProxyInfo.ReturnType}");
 }
Exemplo n.º 3
0
        /// <summary>
        /// 调用远程服务
        /// </summary>
        /// <param name="actionType">Action类型</param>
        /// <param name="paramList">参数列表</param>
        /// <returns></returns>
        public virtual async Task <object> CallRemoteServiceAsync(MethodInfo actionType, object[] paramList)
        {
            ServiceProxyInfo serviceProxyInfo = GetServiceProxyInfo(actionType);

            if (serviceProxyInfo == null)
            {
                var actionTypeName = actionType != null ? actionType.Name : string.Empty;
                throw new InvalidOperationException($"Action not found. ActionTypeName={actionTypeName}");
            }

            logger.LogInformation($"Call remote service beginning. ProxyName={serviceProxyInfo.ProxyName}, ServiceId={serviceProxyInfo.ServiceId}, ActionId={serviceProxyInfo.ActionId}");

            logger.LogDebug($"Service proxy detail info. ProxyName={serviceProxyInfo.ProxyName}, ServiceId={serviceProxyInfo.ServiceId}, ActionId={serviceProxyInfo.ActionId}, Enabled={serviceProxyInfo.Enabled}, Timeout={serviceProxyInfo.Timeout}, ActionProxyType={serviceProxyInfo.ActionProxyType}, ReturnType={serviceProxyInfo.ReturnType}");

            if (!serviceProxyInfo.Enabled)
            {
                throw new InvalidOperationException($"Action is disabled. ProxyName={serviceProxyInfo.ProxyName}, ServiceId={serviceProxyInfo.ServiceId},ActionId={serviceProxyInfo.ActionId}");
            }

            logger.LogDebug($"Invoke ServiceCaller.CallAsync. ProxyName={serviceProxyInfo.ProxyName}, ServiceId={serviceProxyInfo.ServiceId}, ActionId={serviceProxyInfo.ActionId}, ParamList={(paramList == null || paramList.Length == 0 ? string.Empty : string.Join("|", paramList))}");
            ServiceCallResult result = await serviceCaller.CallAsync(nodeClientContainer, new ServiceCallInfo()
            {
                ProxyName   = serviceProxyInfo.ProxyName,
                ServiceId   = serviceProxyInfo.ServiceId,
                ActionId    = serviceProxyInfo.ActionId,
                ServiceName = serviceProxyInfo.ServiceName,
                ActionName  = serviceProxyInfo.ActionName,
                ParamList   = paramList,
                ReturnType  = serviceProxyInfo.ReturnType,
                Timeout     = serviceProxyInfo.Timeout
            });

            logger.LogInformation($"Call remote service finished. ProxyName={serviceProxyInfo.ProxyName}, ServiceId={serviceProxyInfo.ServiceId}, ActionId={serviceProxyInfo.ActionId}");

            return(result.ReturnVal);
        }