private T DoExecute <T>(ITopRequest <T> request, string session, DateTime timestamp) where T : TopResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.Add(METHOD, request.GetApiName()); txtParams.Add(VERSION, "2.0"); txtParams.Add(SIGN_METHOD, Constants.SIGN_METHOD_MD5); txtParams.Add(APP_KEY, appKey); txtParams.Add(FORMAT, format); txtParams.Add(PARTNER_ID, GetSdkVersion()); txtParams.Add(TIMESTAMP, timestamp); txtParams.Add(TARGET_APP_KEY, request.GetTargetAppKey()); txtParams.Add(SESSION, session); txtParams.AddAll(this.systemParameters); if (this.useSimplifyJson) { txtParams.Add(SIMPLIFY, "true"); } // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignTopRequest(txtParams, appSecret, true)); // 添加头部参数 if (this.useGzipEncoding) { request.GetHeaderParameters()[Constants.ACCEPT_ENCODING] = Constants.CONTENT_ENCODING_GZIP; } string realServerUrl = GetServerUrl(this.serverUrl, request.GetApiName(), session); string reqUrl = webUtils.BuildGetUrl(realServerUrl, txtParams); try { string body; if (request is ITopUploadRequest <T> ) // 是否需要上传文件 { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(realServerUrl, txtParams, fileParams, request.GetHeaderParameters()); } else { body = webUtils.DoPost(realServerUrl, txtParams, request.GetHeaderParameters()); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (FORMAT_XML.Equals(format)) { ITopParser tp = new TopXmlParser(); rsp = tp.Parse <T>(body); } else { ITopParser tp; if (useSimplifyJson) { tp = new TopJsonSimplifyParser(); } else { tp = new TopJsonParser(); } rsp = tp.Parse <T>(body); } } // 追踪错误的请求 if (!disableTrace && rsp.IsError) { StringBuilder sb = new StringBuilder(reqUrl).Append(" response error!\r\n").Append(rsp.Body); topLogger.Warn(sb.ToString()); } return(rsp); } catch (Exception e) { if (!disableTrace) { StringBuilder sb = new StringBuilder(reqUrl).Append(" request error!\r\n").Append(e.StackTrace); topLogger.Error(sb.ToString()); } throw e; } }
private T DoExecute <T>(IAliyunRequest <T> request, string session, DateTime timestamp) where T : AliyunResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(CreateErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.AddAll(this.systemParameters); AddCommonParams(request, txtParams); string reqUrl = webUtils.BuildGetUrl(this.serverUrl, txtParams); try { string body; if (request is IAliyunUploadRequest <T> ) // 是否需要上传文件 { IAliyunUploadRequest <T> uRequest = (IAliyunUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl.TrimEnd('/'), txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl.TrimEnd('/'), txtParams); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (FORMAT_XML.Equals(format)) { IAliyunParser tp = new AliyunXmlParser(); rsp = tp.Parse <T>(body); } else { IAliyunParser tp = new AliyunJsonParser(); rsp = tp.Parse <T>(body); } } // 追踪错误的请求 if (!disableTrace && rsp.IsError) { StringBuilder sb = new StringBuilder(reqUrl).Append(" response error!\r\n").Append(rsp.Body); topLogger.Warn(sb.ToString()); } return(rsp); } catch (Exception e) { if (!disableTrace) { StringBuilder sb = new StringBuilder(reqUrl).Append(" request error!\r\n").Append(e.StackTrace); topLogger.Error(sb.ToString()); } throw e; } }
private T DoExecute <T>(ITopRequest <T> request, string session, DateTime timestamp) where T : TopResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(createErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(request.GetParameters()); txtParams.Add(METHOD, request.GetApiName()); txtParams.Add(VERSION, "2.0"); txtParams.Add(APP_KEY, appKey); txtParams.Add(FORMAT, format); txtParams.Add(PARTNER_ID, "top-sdk-net-20130425"); txtParams.Add(TIMESTAMP, timestamp); txtParams.Add(SESSION, session); txtParams.AddAll(this.systemParameters); // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignTopRequest(txtParams, appSecret)); // 是否需要上传文件 string body; if (request is ITopUploadRequest <T> ) { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl, txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl, txtParams); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { if (FORMAT_XML.Equals(format)) { ITopParser tp = new TopXmlParser(); rsp = tp.Parse <T>(body); } else { ITopParser tp = new TopJsonParser(); rsp = tp.Parse <T>(body); } } // 追踪错误的请求 if (!disableTrace) { rsp.ReqUrl = webUtils.BuildGetUrl(this.serverUrl, txtParams); if (rsp.IsError) { topLogger.Warn(rsp.ReqUrl + "\r\n" + rsp.Body); } } return(rsp); }
void TopCometStreamConsume(long lastStartConsumeThread, ref bool bstop, IStreamImplementation stream, IConnectionLifeCycleListener connectListener) { startConsumeThreadTimes = 0; while (!allStop && !closed && stream.IsAlive()) { try { stream.NextMsg(); } catch (Exception e) {//出现了read time out异常 // 资源清理 if (stream != null) { try { stream.Close(); } catch (Exception e1) { logger.Error(e1.Message); } } stream = null; closed = true; //通知 if (connectionListener != null) { try { connectionListener.OnReadTimeout(); } catch (Exception ex) { logger.Error(ex.Message); } } /** * 30分钟内发送了10次IOException */ if (DateTime.Now.Ticks - lastStartConsumeThread < 18000000000) {// 短时间内由于读取IOException连接了10次,则退出 startConsumeThreadTimes++; if (startConsumeThreadTimes >= 10) { bstop = true; if (connectionListener != null) { try { connectionListener.OnMaxReadTimeoutException(); } catch (Exception maxE) { logger.Error(maxE.Message); } } logger.Error("Occure too many exception,stop the system,please check"); //通知唤醒控制线程,但是不在发起重连接 try { Monitor.Enter(objLock); Monitor.PulseAll(objLock); } catch (Exception e2) { } finally { Monitor.Exit(objLock); } } else { //没有到达10次,通知重连 startConsumeThreadTimes = 0; serverRespCode = StreamConstants.RECONNECT; try { Monitor.Enter(objLock); Monitor.PulseAll(objLock); } catch (Exception e2) { } finally { Monitor.Exit(objLock); } closed = false; break; } } else { // 通知重连 Console.WriteLine(" 通知重连" + DateTime.Now.ToString()); startConsumeThreadTimes = 0; serverRespCode = StreamConstants.RECONNECT; try { Monitor.Enter(objLock); Console.WriteLine(" PulseAll" + DateTime.Now.ToString()); Monitor.PulseAll(objLock); } catch (Exception e2) { } finally { Monitor.Exit(objLock); } closed = false; break; } } } //出现异常情况下做资源清理 if (stream != null) { try { stream.Close(); } catch (Exception e) { logger.Warn(e.Message); } } }
private T DoExecute <T>(ITopRequest <T> request, string session, DateTime timestamp) where T : TopResponse { // 提前检查业务参数 try { request.Validate(); } catch (TopException e) { return(createErrorResponse <T>(e.ErrorCode, e.ErrorMsg)); } string sip_timestamp = timestamp.ToString("yyyy-MM-dd HH:mm:ss.000"); // 添加协议级请求参数 TopDictionary txtParams = new TopDictionary(); PortalRestRequest portalRestRequest = request.GetParameters(); //Jayrock.Json.JsonTextWriter writer = new Jayrock.Json.JsonTextWriter(); //Jayrock.Json.Conversion.JsonConvert.Export(paramDict, writer); //txtParams.Add(PORTALTRANSACTION, "[" + Jayrock.Json.Conversion.JsonConvert.ExportToString(portalRestRequest) + "]"); txtParams.Add(PORTALTRANSACTION, "[" + Newtonsoft.Json.JsonConvert.SerializeObject(portalRestRequest) + "]"); txtParams.Add(APP_KEY, appKey); txtParams.Add(TIMESTAMP, sip_timestamp); txtParams.AddAll(this.systemParameters); // 添加签名参数 txtParams.Add(SIGN, TopUtils.SignBurgeonPortalRequest(appKey, appSecret, sip_timestamp)); // 是否需要上传文件 string body; if (request is ITopUploadRequest <T> ) { ITopUploadRequest <T> uRequest = (ITopUploadRequest <T>)request; IDictionary <string, FileItem> fileParams = TopUtils.CleanupDictionary(uRequest.GetFileParameters()); body = webUtils.DoPost(this.serverUrl, txtParams, fileParams); } else { body = webUtils.DoPost(this.serverUrl, txtParams); } // 解释响应结果 T rsp; if (disableParser) { rsp = Activator.CreateInstance <T>(); rsp.Body = body; } else { ITopParser tp = new TopJsonParser(); //去掉body[] body = body.Substring(1, body.LastIndexOf(']') - 1); rsp = tp.Parse <T>(body); } // 追踪错误的请求 if (!disableTrace) { rsp.Body = body; rsp.ReqUrl = webUtils.BuildGetUrl(this.serverUrl, txtParams); if (rsp.IsError) { topLogger.Warn(rsp.ReqUrl + "\r\n" + rsp.Body); } } return(rsp); }