无法在控制器中获取错误500详细信息

时间:2020-07-08 18:57:38

标签: c# rest web-services try-catch

我有一个简单的Rest Web服务,它会随机引发一个异常(内部服务器错误)。 在50.000次迭代循环中的控制台程序中强调此Web api时,我注意到了这一点。 我从这个客户那里得到什么:


{状态代码:500,ReasonPhrase:“内部服务器错误”,版本:1.1,


我想要的是获取此Error 500详细信息。 但是我无法在我的控制器中捕获它,代码也没有捕获。 控制器代码:

[HttpPost]
    [Route("{IdLog}/message")]
    public string CreateLogMsg(long IdLog, [FromBody] TlogLineDTO oLogLine)
    {
        long lTmp = 0;

        try
        {
            if (ModelState.IsValid)
            {
                string sTmp = _oExploitBll.InsertNewLogLine(oLogLine).ToString();

                if (!long.TryParse(sTmp, out lTmp))
                {
                    // Create a new file     
                    Random rnd = new Random();

                    using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp\20200707\REF_" + rnd.Next().ToString() + ".txt"))
                    {
                        sw.WriteLine(sTmp);
                    }
                }
                return sTmp;
            }
            else
            {
                // Create a new file where to put the error message   
                Random rnd = new Random();

                using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp\20200707\REF_" + rnd.Next().ToString() + ".txt"))
                {
                    sw.WriteLine("Ko");
                }

                return "Ko";
            }
        }
        catch (Exception ex)
        {
            string sMsgErr = ex.Message + "-" + ex.StackTrace;

            // Create a new file     
            Random rnd = new Random();

            using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp\20200707\REF_" + rnd.Next().ToString() + ".txt"))
            {
                sw.WriteLine(sMsgErr);
            }
            return "0";
        }          
    }

我怎样才能使它成功? 有人有主意吗?

非常感谢。

埃里克

2 个答案:

答案 0 :(得分:0)

如您所说,如果错误是由于服务器压力太大而发生的,则请求永远无法到达控制器。实际上,服务器甚至无法将它们排入队列。如此一来,您将无法处理它们,除非您添加了一个副车服务器,该服务器接收来自客户端的请求,将其转发到您的服务器,然后

  • 如果可以,则将响应转发给客户端
  • else处理错误

在实际情况下,您可以使用负载平衡器在更多服务器之间分配请求负载

答案 1 :(得分:0)

实际上,我已经更正了代码,并为http请求添加了2次重试的循环,这似乎可行:当http请求失败时,我重试一次(或重试次数),通常http在第二次重试中请求成功。 但是我仍然不知道为什么HTTP请求有时会失败。