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