//private static WebClient webClient;

        static APILoggerFilterAttribute()
        {
            var handler = new HttpClientHandler()
            {
                AutomaticDecompression = DecompressionMethods.GZip
            };

            Client         = new HttpClient(handler);
            Client.Timeout = TimeSpan.FromMilliseconds(100);
            Client.DefaultRequestHeaders.Add("Connection", "keep-alive");
            mylog  = new Log();
            Models = new RequestReponseModels();
        }
        //private static void HttpRequestAsync(RequestReponseModels models)
        //{
        //    using (var socket = new TcpClient("10.30.3.149", 8099))
        //    {
        //        var headerContent = new StringBuilder();
        //        headerContent.AppendLine("POST /api/Log/LogConnectErrorAsync HTTP/1.0");
        //        headerContent.AppendLine("Accept: */*");
        //        headerContent.AppendLine("Host: " + "10.30.3.149");
        //        headerContent.AppendLine("Content-Type: application/javascript; charset=utf8");
        //        headerContent.AppendLine("Content-Length: " + JsonConvert.SerializeObject(models).Length);
        //        headerContent.AppendLine("Connection: Close");
        //        headerContent.AppendLine();

        //        var header = Encoding.UTF8.GetBytes(headerContent.ToString());
        //        var body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(models).ToString());

        //        using (var stream = socket.GetStream())
        //        {
        //            stream.Write(header, 0, header.Length);
        //            stream.Write(body, 0, body.Length);
        //        }
        //    }
        //}


        //非同步

        //private void Start(RequestReponseModels models)
        //{
        //    //建立一個執行緒,並且傳入一個委派物件 ParameterizedThreadStart,'
        //    //並且設定指向 PrintOddNumber 方法。
        //    Thread oThreadA = new Thread(new ParameterizedThreadStart(postLog));

        //    //設定執行緒的 Name
        //    oThreadA.Name = "HangfireLog";
        //    oThreadA.IsBackground = true;
        //    //啟動執行緒物件,並且傳入參數
        //    oThreadA.Start(models);
        //}

        //private async void postLog(object value)
        //{
        //    var url = System.Configuration.ConfigurationManager.AppSettings["LogAddressUrl"];
        //    var client = new HttpClient()
        //    {
        //        BaseAddress = new Uri(url + "api/Log/LogConnectErrorAsync"),
        //        Timeout = TimeSpan.FromMilliseconds(100)
        //    };
        //    client.DefaultRequestHeaders.Add("Connection", "keep-alive");
        //    client.DefaultRequestHeaders.Add("Keep-Alive", "600");
        //    try
        //    {
        //        await client.PostAsync(url + "api/Log/LogConnectErrorAsync", new StringContent(JsonConvert.SerializeObject(value).ToString(), Encoding.UTF8, "application/json")).ConfigureAwait(false);
        //    }
        //    catch (Exception e)
        //    {
        //        mylog.HangfireErrorLog(e.Message, HttpContext.Current.Server.MapPath("~/Log/Temp"));
        //    }
        //    finally
        //    {
        //        client.Dispose();
        //    }
        //}

        //Task 非同步
        private static async Task postLog(RequestReponseModels models)
        {
            var url = System.Configuration.ConfigurationManager.AppSettings["LogAddressUrl"];

            try
            {
                await Client.PostAsync(url + "api/Log/LogConnectErrorAsync", new StringContent(JsonConvert.SerializeObject(models).ToString(), Encoding.UTF8, "application/json")).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                mylog.HangfireErrorLog(e.Message, HttpContext.Current.Server.MapPath("~/Log/Temp"));
            }
        }
        private static void postLogWebClient(RequestReponseModels models)
        {
            var url = System.Configuration.ConfigurationManager.AppSettings["LogAddressUrl"];

            try
            {
                using (WebClient webClient = new WebClient())
                {
                    webClient.Encoding = Encoding.UTF8;
                    //webClient.Headers[HttpRequestHeader.AcceptEncoding] = "gzip";
                    webClient.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                    string json = JsonConvert.SerializeObject(models);
                    webClient.UploadString(url + "api/Log/LogConnectErrorAsync", json);
                }
            }
            catch (Exception e)
            {
                mylog.HangfireErrorLog(e.Message, HttpContext.Current.Server.MapPath("~/Log/Temp"));
            }
        }
        private static void postLoghttpWebRequest(RequestReponseModels models)
        {
            var    url      = System.Configuration.ConfigurationManager.AppSettings["LogAddressUrl"];
            string postData = JsonConvert.SerializeObject(models);

            byte[] bytes          = Encoding.UTF8.GetBytes(postData);
            var    httpWebRequest = (HttpWebRequest)WebRequest.Create(url + "api/Log/LogConnectErrorAsync");

            httpWebRequest.Method        = "POST";
            httpWebRequest.ContentLength = bytes.Length;
            httpWebRequest.ContentType   = "application/json";
            using (Stream requestStream = httpWebRequest.GetRequestStream())
            {
                requestStream.Write(bytes, 0, bytes.Count());
            }
            var httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();

            if (httpWebResponse.StatusCode != HttpStatusCode.OK)
            {
                string message = String.Format("POST failed. Received HTTP {0}", httpWebResponse.StatusCode);
                throw new ApplicationException(message);
            }
        }
Ejemplo n.º 5
0
        private async Task NormalAsync(HttpContext context, Exception exception = null)
        {
            if (exception == null)
            {
                _requestreponseModels = new RequestReponseModels()
                {
                    connectModel = new HandlingLogContext(context).GetData(),
                    errModel     = null
                };

                if (System.Text.ASCIIEncoding.ASCII.GetByteCount(JsonConvert.SerializeObject(_requestreponseModels.connectModel)) > SettingHelper.Over_ReponseSize)
                {
                    mylog.SizeErrorLog(JsonConvert.SerializeObject(_requestreponseModels.connectModel), $"{Directory.GetCurrentDirectory()}");
                }
                else
                {
                    var client = new HttpClient()
                    {
                        BaseAddress = new Uri(ToolsContext.config.GetSection(SettingHelper.LogDomain).Value + "api/Log/LogConnectErrorAsync"),
                        Timeout     = TimeSpan.FromMilliseconds(300)
                    };
                    try
                    {
                        var response = await client.PostAsync(ToolsContext.config.GetSection(SettingHelper.LogDomain).Value + "api/Log/LogConnectErrorAsync", new StringContent(JsonConvert.SerializeObject(_requestreponseModels).ToString(), Encoding.UTF8, "application/json"));
                    }
                    catch (Exception e)
                    {
                        mylog.HangfireErrorLog(e.Message, $"{Directory.GetCurrentDirectory()}");
                    }
                    finally
                    {
                        client.Dispose();
                    }
                }
            }
            else
            {
                _requestreponseModels = new RequestReponseModels()
                {
                    connectModel = new HandlingLogContext(context).GetData(),
                    errModel     = new ErrLogContext(context, exception).GetErrData()
                };

                if (System.Text.ASCIIEncoding.ASCII.GetByteCount(JsonConvert.SerializeObject(_requestreponseModels.connectModel)) > SettingHelper.Over_ReponseSize ||
                    System.Text.ASCIIEncoding.ASCII.GetByteCount(JsonConvert.SerializeObject(_requestreponseModels.errModel)) > SettingHelper.Over_ReponseSize)
                {
                    mylog.SizeErrorLog(JsonConvert.SerializeObject(_requestreponseModels.connectModel), $"{Directory.GetCurrentDirectory()}");
                    mylog.SizeErrorLog(JsonConvert.SerializeObject(_requestreponseModels.errModel), $"{Directory.GetCurrentDirectory()}");
                }
                else
                {
                    var client = new HttpClient()
                    {
                        BaseAddress = new Uri(ToolsContext.config.GetSection(SettingHelper.LogDomain).Value + "api/Log/LogConnectErrorAsync"),
                        Timeout     = TimeSpan.FromMilliseconds(300)
                    };
                    try
                    {
                        var response = await client.PostAsync(ToolsContext.config.GetSection(SettingHelper.LogDomain).Value + "api/Log/LogConnectErrorAsync", new StringContent(JsonConvert.SerializeObject(_requestreponseModels).ToString(), Encoding.UTF8, "application/json"));
                    }
                    catch (Exception e)
                    {
                        mylog.HangfireErrorLog(e.Message, $"{Directory.GetCurrentDirectory()}");
                    }
                    finally
                    {
                        client.Dispose();
                    }
                }
            }
        }