Beispiel #1
0
    //创建请求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();
        }
    }
Beispiel #4
0
 //开始进行加载处理
 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);
    }
Beispiel #7
0
 /// <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();
 }
Beispiel #8
0
    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();
    }
Beispiel #10
0
    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));
 }