//创建请求vo public SnapRequestVO createRequestVO(SnapAppApiInterface requestInterTypestring, string apiName, string requestMethod, JsonData jsonData = null, Action <SnapRpcDataVO> callBackAction = null, int priority = 0, SnapAppApiThirdRequestFace third = SnapAppApiThirdRequestFace.No_Third) { SnapRequestVO requestVO = new SnapRequestVO(jsonData, callBackAction); requestVO.requestActionId = requestInterTypestring; requestVO.requestAction = apiName; requestVO.requestMethod = requestMethod; requestVO.requestId = ++requestIndex; requestVO.requestPriority = priority; requestVO.thirdType = third; if (jsonData != null) { requestVO.urlTypeExt = jsonData.TryGetString("urlTypeExt", "?"); } if (priority == int.MaxValue) { requestVOList.Insert(0, requestVO); } else { requestVOList.Add(requestVO); } return(requestVO); }
/// <summary> /// Get请求方式 /// </summary> /// <param name="vo"></param> /// <returns></returns> public HttpWebRequest GetRequest(SnapRequestVO vo) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(SnapHttpConfig.NET_APP_URL + vo.requestAction + vo.toJSONString()); //LogManager.Log((SnapHttpConfig.NET_APP_URL , vo.requestAction , vo.toJSONString())); GetRequestHeader(request, vo); return(request); }
/** *开始加载http协议,配置加载参数 * @param vo * */ public void startLoader(SnapRequestVO vo, Boolean reload = false) { if (vo == null || isInRequesting) { Console.WriteLine(httpRequestId + "正在使用中..."); return; } //System.GC.Collect(); needReload = reload; isInRequesting = true; try { switch (vo.requestMethod) { case SnapHttpConfig.NET_REQUEST_GET: request = GetRequest(vo); break; case SnapHttpConfig.NET_REQUEST_POST: request = PostRequest(vo); break; case SnapHttpConfig.NET_REQUEST_PUT: request = PutRequest(vo); break; default: break; } httpRequestVO = vo; LogManager.Log(" - Url:", request.RequestUri); request.BeginGetResponse(new AsyncCallback(GetHttpResponse), request); //GetHttpResponse(); } catch (WebException e) { LogManager.Log("http WebException:::", e.Message); string find_str = "error: ("; int index = e.Message.IndexOf(find_str); if (index != -1) { string errorCode = e.Message.Substring(index, find_str.Length + 3); errorCode = errorCode.Replace(find_str, ""); //全局异常 if (SnapAppApi.RequestErrorCodeBack != null) { SnapAppApi.RequestErrorCodeBack.Invoke(int.Parse(errorCode)); } } close(); } }
//开始进行加载处理 private void loadHttpRequest(int id) { if (requestVOList.Count > 0 && id < requestItemList.Count && (requestItemList[id] != null)) { if (requestItemList[id] != null) { requestItemList[id].close(); } SnapRequestVO vo = requestVOList[0]; requestVOList.RemoveAt(0); vo.requestStartTime = GetTimeStamp(); vo.loaderId = id; requestItemList[id].startLoader(vo); } }
private WebHeaderCollection GetRequestHeader(HttpWebRequest request, SnapRequestVO vo) { request.ServicePoint.Expect100Continue = false; request.ServicePoint.UseNagleAlgorithm = false; request.ServicePoint.ConnectionLimit = 50; request.AllowWriteStreamBuffering = false; request.Method = vo.requestMethod; request.KeepAlive = false; request.ContentType = SnapHttpConfig.NET_CONTENT_TYPE; request.Timeout = SnapHttpConfig.NET_TIMEOUT; request.ReadWriteTimeout = SnapHttpConfig.NET_TIMEOUT; request.Accept = SnapHttpConfig.NET_CONTENT_TYPE; request.Headers.Add("Token", SnapHttpConfig.NOT_LOGINED_APP_TOKEN); request.Headers.Add("UserToken", SnapHttpConfig.LOGINED_APP_TOKEN); return(request.Headers); }
/// <summary> /// Post请求方式 /// </summary> /// <param name="vo"></param> /// <returns></returns> public HttpWebRequest PostRequest(SnapRequestVO vo) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(SnapHttpConfig.NET_APP_URL + vo.requestAction); request.ServicePoint.Expect100Continue = false; //LogManager.Log((SnapHttpConfig.NET_APP_URL , vo.requestAction , vo.toJSONString())); GetRequestHeader(request, vo); request.ContentLength = vo.toJSONString().Length; using (StreamWriter streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(vo.toJSONString()); streamWriter.Flush(); streamWriter.Close(); } return(request); }
/// <summary> /// 重新加载,外部请不要调用这个方法,以防出错 /// </summary> public void Re_Request_SnapAppApi_Inner(SnapRequestVO vo) { if (vo == null) { return; } if (vo.requestPriority == int.MaxValue) { requestVOList.Remove(vo); requestVOList.Insert(0, vo); } else { requestVOList.Add(vo); } //sendHttpRequest(); }
private static string GetHttpURL(SnapRequestVO vo) { string request_url = SnapHttpConfig.NET_APP_URL + vo.requestAction; if (vo.thirdType == SnapAppApiThirdRequestFace.Third_Aliyun_OSS) { int index = 0; if (DebugConfigController.Instance.FormalData) { // 正式服 index = 1; } string bucketName = ConfigurationController.Instance.OSSListBucketNames[index]; string endpoint = ConfigurationController.Instance.OSSListEndPoints[index]; request_url = "http://" + bucketName + "." + endpoint + "/" + vo.requestAction; } return(request_url); }
private void PutAudioFile(FileStream fs) { BinaryReader br = new BinaryReader(fs); int lenth = Convert.ToInt32(br.BaseStream.Length); byte[] bytes = br.ReadBytes(lenth); br.Close(); fs.Close(); //开始上传到Oss SnapRequestVO vo = new SnapRequestVO(); vo.mp3byte = bytes; vo.thirdType = SnapAppApiThirdRequestFace.Third_Aliyun_OSS; vo.requestAction = fileUploadKey; SnapPutHttp.PutRequest(vo, uploadFileSuccess); thread.Abort(); }
public static HttpWebRequest PutRequest(SnapRequestVO vo, Action <SnapRpcDataVO> callback = null) { string request_url = GetHttpURL(vo); if (string.IsNullOrEmpty(request_url)) { request_url = SnapHttpConfig.NET_APP_URL; } byte[] body = vo.toByte(); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(request_url); request.Proxy = null; //LogManager.Log(request.RequestUri); request.Method = SnapHttpConfig.NET_REQUEST_PUT; request.Timeout = 600 * 1000; request.ReadWriteTimeout = 600 * 1000; request.ContentType = SnapAppUploadFile.OSS_ContentType; request.ContentLength = body.Length; if (vo.mp3byte != null && vo.mp3byte.Length > 0) { MethodInfo priMethod = request.Headers.GetType().GetMethod("AddWithoutValidate", BindingFlags.Instance | BindingFlags.NonPublic); priMethod.Invoke(request.Headers, new[] { "Date", SnapAppUploadFile.OSS_Date }); priMethod.Invoke(request.Headers, new[] { "Content-Length", body.Length.ToString() }); priMethod.Invoke(request.Headers, new[] { "Content-Type", SnapAppUploadFile.OSS_ContentType }); request.Headers.Add("Authorization", SnapAppUploadFile.OSS_Authorization); } else { request.Headers.Add("Token", SnapHttpConfig.NOT_LOGINED_APP_TOKEN); request.Headers.Add("UserToken", SnapHttpConfig.LOGINED_APP_TOKEN); } try { if (body != null && body.Length > 0) { using (Stream stream = request.GetRequestStream()) { stream.Write(body, 0, body.Length); stream.Flush(); stream.Close(); } } if (callback != null) { //音频文件 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { using (StreamReader reader = new StreamReader(response.GetResponseStream())) { SnapRpcDataVO rpcData = new SnapRpcDataVO(); rpcData.code = 1; rpcData.message = "request success"; rpcData.data = new JsonData(); rpcData.data["uploadUrl"] = response.ResponseUri.AbsolutePath; //if (callback != null) //{ // callback.Invoke(rpcData); // callback = null; //} SnapHttpManager.getInstance().AddOneHttpCallBack(callback, rpcData); reader.Close(); } } response.Close(); request.Abort(); } } } catch (Exception ex) { LogManager.Log(ex.Message); throw; } return(request); }
/// <summary> /// Put请求协议,app内部不会使用,一般都是第三方 /// </summary> /// <param name="vo"></param> /// <returns></returns> public HttpWebRequest PutRequest(SnapRequestVO vo) { return(SnapPutHttp.PutRequest(vo)); }