/// <summary> /// 调用方法 /// </summary> /// <param name="reqMsg"></param> /// <returns></returns> public virtual ResponseMessage CallService(RequestMessage reqMsg) { //获取一个请求 ServiceRequest reqProxy = null; try { //处理数据 using (var waitResult = new WaitResult(reqMsg)) { hashtable[reqMsg.TransactionId] = waitResult; //获取一个请求 reqProxy = GetRequest(); //发送消息 reqProxy.SendMessage(reqMsg); //等待信号响应 var elapsedTime = TimeSpan.FromSeconds(node.Timeout); if (!waitResult.Wait(elapsedTime)) { //如果请求超时,则断开连接 reqProxy.Disconnect(); throw new WarningException(string.Format("【{0}:{1}】 => Call service ({2}, {3}) timeout ({4}) ms.\r\nParameters => {5}" , node.IP, node.Port, reqMsg.ServiceName, reqMsg.MethodName, (int)elapsedTime.TotalMilliseconds, reqMsg.Parameters.ToString())); } return(waitResult.Message); } } finally { //加入队列 if (reqProxy != null) { reqPool.Push(reqProxy); } //用完后移除 hashtable.Remove(reqMsg.TransactionId); } }
/// <summary> /// 调用方法 /// </summary> /// <param name="reqMsg"></param> /// <returns></returns> public virtual ResponseMessage CallService(RequestMessage reqMsg) { //获取一个请求 ServiceRequest reqProxy = null; try { //处理数据 using (var waitResult = new WaitResult(reqMsg)) { hashtable[reqMsg.TransactionId] = waitResult; //获取一个请求 reqProxy = GetRequest(); //发送消息 reqProxy.SendMessage(reqMsg); //等待信号响应 var elapsedTime = TimeSpan.FromSeconds(node.Timeout); if (!waitResult.Wait(elapsedTime)) { //如果请求超时,则断开连接 reqProxy.Disconnect(); throw new WarningException(string.Format("【{0}:{1}】 => Call service ({2}, {3}) timeout ({4}) ms.\r\nParameters => {5}" , node.IP, node.Port, reqMsg.ServiceName, reqMsg.MethodName, (int)elapsedTime.TotalMilliseconds, reqMsg.Parameters.ToString())); } return waitResult.Message; } } finally { //加入队列 if (reqProxy != null) { reqPool.Push(reqProxy); } //用完后移除 hashtable.Remove(reqMsg.TransactionId); } }