Ejemplo n.º 1
0
        /// <summary>
        /// 获取到服务配置信息
        /// </summary>
        /// <param name="serviceName"></param>
        /// <param name="methodName"></param>
        /// <returns></returns>
        public EsbView_ServiceConfig GetServiceConfig(String serviceName, String methodName)
        {
            if (ServiceConfig == null || ServiceConfig.Count == 0)
            {
                return(EsbView_ServiceConfig.Default);
            }
            else
            {
                //--首先查找是否存在方法上的配置信息
                EsbView_ServiceConfig sc = ServiceConfig.Find(x => x.ServiceName == serviceName && x.MethodName == methodName);

                //--如果不存在方法上的配置信息,则查看是否有服务上的配置信息
                if (sc == null)
                {
                    sc = ServiceConfig.Find(x => x.ServiceName == serviceName && x.MethodName == "*");
                }

                //--如果都没有找到,则返回默认配置
                if (sc == null)
                {
                    return(EsbView_ServiceConfig.Default);
                }
                else
                {
                    return(sc);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 请求响应调用-队列化
        /// </summary>
        /// <param name="serviceName">服务名称</param>
        /// <param name="methodName">方法名称</param>
        /// <param name="message">消息内容</param>
        /// <param name="version">服务版本:0代表调用默认版本</param>
        /// <returns></returns>
        public void InvokeQueue(String serviceName, String methodName, String message, Int32 version = 0, AdvanceInvokeParam invokeParam = null)
        {
            //--从ESBConfig中获取到服务版本信息
            ServiceItem si = GetServiceItem(serviceName, version);

            //--从ESBConfig中获取到服务配置信息
            EsbView_ServiceConfig sc = this.ESBConfig.GetServiceConfig(serviceName, GetMethodName(methodName));

            if (String.IsNullOrWhiteSpace(sc.QueueCenterUri))
            {
                throw new Exception("服务需要在管理中心配置队列服务地址才能通过队列调用!");
            }

            QueueMessage qm = new QueueMessage();

            qm.ConsumerAppName = m_ConsumerConfig.ApplicationName;

            if (invokeParam != null && !String.IsNullOrEmpty(invokeParam.ConsumerIP))
            {
                qm.ConsumerIP = invokeParam.ConsumerIP;
            }
            else
            {
                qm.ConsumerIP = m_ConfigurationManager.LocalIP;
            }

            qm.ServiceName = serviceName;
            qm.MethodName  = methodName;
            qm.Message     = message;
            qm.Version     = version;


            m_MessageQueueClient.SendToInvokeQueue(qm);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 请求响应调用
        /// </summary>
        /// <param name="serviceName">服务名称</param>
        /// <param name="methodName">方法名称</param>
        /// <param name="message">消息内容</param>
        /// <param name="version">服务版本:0代表调用默认版本</param>
        /// <returns></returns>
        public String Invoke(String serviceName, String methodName, String message, Int32 version = 0, AdvanceInvokeParam invokeParam = null)
        {
            DateTime reqStartTime = DateTime.Now;

            String hostName = m_ConsumerConfig.ApplicationName;

            if (invokeParam != null && !String.IsNullOrWhiteSpace(invokeParam.ConsumerAppName))
            {
                hostName = invokeParam.ConsumerAppName;
            }

            ESB.Core.Schema.务请求 req = new ESB.Core.Schema.务请求();
            req.务名称  = serviceName;
            req.方法名称 = methodName;
            req.请求时间 = reqStartTime;
            req.主机名称 = hostName;
            req.消息内容 = message;
            req.消息编码 = "";
            req.密码   = "";

            //--从ESBConfig中获取到服务版本信息
            ServiceItem si = GetServiceItem(serviceName, version);

            //--从ESBConfig中获取到服务版本信息
            EsbView_ServiceConfig sc = this.ESBConfig.GetServiceConfig(serviceName, GetMethodName(methodName));
            String msg = EsbClient.DynamicalCallWebService(true, req, si.Binding, si.Version, sc, invokeParam).消息内容;

            return(msg);
        }
Ejemplo n.º 4
0
 public List <EsbView_ServiceConfig> GetCachedServiceConfig(String businessID)
 {
     if (String.IsNullOrEmpty(businessID))
     {
         return(EsbView_ServiceConfig.FindAllCachedService());
     }
     else
     {
         return(EsbView_ServiceConfig.FindAllCachedService().FindAll(x => x.BusinessID == businessID));
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// 动态调用WebService主函数
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static ESB.Core.Schema.务响应 DynamicalCallWebService(
            Boolean needResponse
            , ESB.Core.Schema.务请求 request
            , List <BindingTemplate> bindings
            , Int32 version
            , EsbView_ServiceConfig serviceConfig
            , AdvanceInvokeParam invokeParam)
        {
            //--记录接收时间并放在请求结束时间中,用于判读ESB在接到请求到开始调用的耗时
            DateTime receiveDateTime = DateTime.Now;

            //--验证并预处理请求参数
            InvalidRequest(request);

            //--获取跟踪上下文
            ESBTraceContext esbTraceContext = GetEsbTraceContext();

            //--获取到请求对应服务的绑定
            BindingTemplate binding = LoadBalance.GetBinding(bindings, serviceConfig.HBPolicy);

            //--构造调用参数
            CallState state = new CallState()
            {
                Binding          = binding,
                ServiceConfig    = serviceConfig,
                InvokeParam      = invokeParam,
                Request          = request,
                RequestBeginTime = request.请求时间,
                RequestEndTime   = receiveDateTime,
                TraceContext     = esbTraceContext,
                ServiceVersion   = version,
                MessageID        = Guid.NewGuid().ToString()
            };

            return(CallService(state));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 动态调用WebService主函数
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public static ESB.Core.Schema.服务响应 DynamicalCallWebService(
            Boolean needResponse
            , ESB.Core.Schema.服务请求 request
            , List<BindingTemplate> bindings
            , Int32 version
            , EsbView_ServiceConfig serviceConfig
            , AdvanceInvokeParam invokeParam)
        {
            //--记录接收时间并放在请求结束时间中,用于判读ESB在接到请求到开始调用的耗时
            DateTime receiveDateTime = DateTime.Now;

            //--验证并预处理请求参数
            InvalidRequest(request);

            //--获取跟踪上下文
            ESBTraceContext esbTraceContext = GetEsbTraceContext();

            //--获取到请求对应服务的绑定
            BindingTemplate binding = LoadBalance.GetBinding(bindings, serviceConfig.HBPolicy);

            //--构造调用参数
            CallState state = new CallState()
            {
                Binding = binding,
                ServiceConfig = serviceConfig,
                InvokeParam = invokeParam,
                Request = request,
                RequestBeginTime = request.请求时间,
                RequestEndTime = receiveDateTime,
                TraceContext = esbTraceContext,
                ServiceVersion = version,
                MessageID = Guid.NewGuid().ToString()
            };

            return CallService(state);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 获取到ESBConfig
        /// </summary>
        /// <returns></returns>
        private ESBConfig GetESBConfig(RegistryClient regClient)
        {
            ConsumerConfig consumerConfig = regClient.ConsumerConfig;
            ESBConfig      esbConfig      = new ESBConfig();

            //--处理中心地址
            foreach (SettingUri uri in SettingUri.FindAll())
            {
                switch (uri.UriType)
                {
                case 0:     //--注册中心
                    esbConfig.Registry.Add(new RegistryItem()
                    {
                        Uri = String.Format("{0}:{1}", uri.Uri, uri.Port), Load = 1
                    });
                    break;

                case 1:     //--监控中心
                    esbConfig.Monitor.Add(new MonitorItem()
                    {
                        Uri = String.Format("{0}:{1}", uri.Uri, uri.Port), Load = 1
                    });
                    break;

                case 2:     //--调用中心
                    esbConfig.CallCenter.Add(new CallCenterItem()
                    {
                        Uri = uri.Uri, Load = 1
                    });
                    break;

                case 3:     //--队列中心
                    esbConfig.MessageQueue.Add(new MessageQueueItem()
                    {
                        Uri = String.Format("{0}:{1}:{2}:{3}", uri.Uri, uri.Port, uri.UserName, uri.PassWord), Load = 1
                    });
                    break;

                case 4:     //--缓存中心
                    esbConfig.Cache.Add(new CacheItem()
                    {
                        Uri = String.Format("{0}:{1}", uri.Uri, uri.Port), Load = 1
                    });
                    break;

                default:
                    break;
                }
            }

            //--处理服务
            if (regClient.RegistryClientType == CometClientType.Consumer ||
                regClient.RegistryClientType == CometClientType.Portal ||
                regClient.RegistryClientType == CometClientType.Monitor)
            {
                foreach (var refService in consumerConfig.Reference)
                {
                    List <EsbView_ServiceVersion> lstBS = EsbView_ServiceVersion.FindAllPublish();
                    foreach (EsbView_ServiceVersion bs in lstBS.Where(x => x.ServiceName == refService.ServiceName))
                    {
                        ServiceItem si = new ServiceItem();
                        si.ServiceName = bs.ServiceName;
                        si.Version     = bs.BigVer;
                        si.Binding     = bs.Binding;
                        si.IsDefault   = (bs.BigVer == bs.DefaultVersion);

                        esbConfig.Service.Add(si);
                    }
                }
            }
            else if (regClient.RegistryClientType == CometClientType.CallCenter ||
                     regClient.RegistryClientType == CometClientType.QueueCenter)
            {
                EntityList <EsbView_ServiceVersion> lstBS = EsbView_ServiceVersion.FindAllPublish();
                foreach (var bs in lstBS)
                {
                    ServiceItem si = new ServiceItem();
                    si.ServiceName = bs.ServiceName;
                    si.Version     = bs.BigVer;
                    si.Binding     = bs.Binding;
                    si.IsDefault   = (bs.BigVer == bs.DefaultVersion);

                    esbConfig.Service.Add(si);
                }
            }

            //--处理服务配置
            if (regClient.RegistryClientType == CometClientType.Consumer ||
                regClient.RegistryClientType == CometClientType.Portal ||
                regClient.RegistryClientType == CometClientType.Monitor)
            {
                List <EsbView_ServiceConfig> lstSC = EsbView_ServiceConfig.FindAll();

                foreach (var refService in consumerConfig.Reference)
                {
                    List <EsbView_ServiceConfig> scs = lstSC.FindAll(x => x.ServiceName == refService.ServiceName);
                    foreach (EsbView_ServiceConfig sc in scs)
                    {
                        esbConfig.ServiceConfig.Add(sc);
                    }
                }
            }
            else if (regClient.RegistryClientType == CometClientType.CallCenter ||
                     regClient.RegistryClientType == CometClientType.QueueCenter)
            {
                esbConfig.ServiceConfig = EsbView_ServiceConfig.FindAll();
            }


            return(esbConfig);
        }