/// <summary> /// 将请求消息转换成目标服务的输入参数 /// </summary> /// <param name="asm"></param> /// <param name="request"></param> /// <returns></returns> private static Object GetRequest(SoapClientItem soapClient, ESB.Core.Schema.服务请求 request) { object target = null; try { target = soapClient.CreateRequestObject(); if (target != null) { soapClient.SetReqObjProperty(target, "主机名称", request.主机名称); soapClient.SetReqObjProperty(target, "服务名称", request.服务名称); soapClient.SetReqObjProperty(target, "方法名称", request.方法名称); soapClient.SetReqObjProperty(target, "消息内容", request.消息内容); soapClient.SetReqObjProperty(target, "密码", request.密码); soapClient.SetReqObjProperty(target, "请求时间", request.请求时间); } } catch (Exception ex) { XTrace.WriteLine("构造请求参数失败:" + ex.Message); } return target; }
/// <summary> /// 利用反射调用目标服务 /// </summary> /// <param name="url"></param> /// <param name="request"></param> /// <returns></returns> internal static ESB.Core.Schema.服务响应 CallWebService(CallState state) { CallState callState = state as CallState; BindingTemplate binding = callState.Binding; ESB.Core.Schema.服务请求 request = callState.Request; SoapClientItem soapClient = null; try { soapClient = SoapClientCache.GetItem(binding.Address, request.服务名称); } catch (Exception ex) { throw LogUtil.ExceptionAndLog(callState, "获取目标服务的代理程序集时发生异常", ex.Message, binding, request); } if (soapClient != null) { MethodInfo method = soapClient.GetMethodInfo(request.方法名称); if (method == null) throw LogUtil.ExceptionAndLog(callState, "目标服务未实现方法", request.方法名称, binding, request); Object req = GetRequest(soapClient, request); if (req == null) throw LogUtil.ExceptionAndLog(callState, "无法将请求转换成目标服务所需要的输入参数", "", binding, request); Object res = null; try { callState.CallBeginTime = DateTime.Now; res = method.Invoke(soapClient.PortObject, new Object[] { req }); callState.CallEndTime = DateTime.Now; } catch (Exception ex) { callState.CallEndTime = DateTime.Now; String message = String.Empty; if (ex.InnerException != null) message = ex.InnerException.Message; else message = ex.Message; throw LogUtil.ExceptionAndLog(callState, "调用目标服务抛出异常", message, binding, request); } ESB.Core.Schema.服务响应 response = GetResponse(res, method.ReturnType); LogUtil.AddAuditLog( 1 , binding , callState , response.消息内容, request); return response; } else { throw LogUtil.ExceptionAndLog(callState, "获取目标服务的代理程序集失败!", "", binding, request); } }
/// <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; }