【问题标题】:Cannot get error 500 details in controller无法在控制器中获取错误 500 详细信息
【发布时间】:2020-07-08 18:57:38
【问题描述】:

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


{StatusCode:500,ReasonPhrase:“内部服务器错误”,版本:1.1,


我想要的是得到这个错误 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";
        }          
    }

我怎样才能让它进入陷阱? 有人有想法吗?

非常感谢。

埃里克

【问题讨论】:

  • 使用断点来调试你的代码:)
  • Akbar Asghari:感谢您的评论。如果我没有被困在其中几天,我会觉得很有趣。

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


【解决方案1】:

如果如您所说,由于服务器压力过大而发生错误,那么导致错误的请求永远不会到达控制器。实际上服务器甚至不能将它们排入队列。所以你不能处理它们,除非你添加一个从客户端接收请求的边车服务器,然后将它们转发到你的服务器

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

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

【讨论】:

  • 感谢您的回复@user3415993。我错过了说我在该 Web 服务的生产环境中有这样的错误。这就是为什么我在 Dev 环境中运行这个循环来引发这些错误并详细检测它们的原因。
  • 然后你应该看看你的网络服务器标志,看看错误是否总是与同一个请求有关。是否与大量请求有关?
  • ddfra :错误与同一个请求无关。与压力程序相比,对 Web 服务的请求数量并不多。
【解决方案2】:

事实上,我已经更正了代码并为 http 请求添加了 2 次重试循环,它似乎有效:当 http 请求失败时,我重试一次(或我想要的重试次数),通常http请求第二次重试成功。 但是我还是不知道为什么有时候http请求会失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 2012-02-20
    • 2012-08-24
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多