Не удается получить сведения об ошибке 500 в контроллере - PullRequest
0 голосов
/ 08 июля 2020

У меня есть простая веб-служба Rest, которая случайным образом вызывает исключение (внутренняя ошибка сервера). Я заметил это, когда подчеркнул этот веб-API в консольной программе за 50 000 итераций l oop. Что я получаю в этом клиенте:

{StatusCode: 500, ReasonPhrase: 'Внутренняя ошибка сервера', версия: 1.1,

Я хочу получить эту деталь об ошибке 500. Но я не могу поймать это в своем контроллере, кода в ловушке нет go. Код контроллера:

[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";
        }          
    }

Как сделать go в улове? Есть у кого-нибудь идеи?

Заранее большое спасибо.

Эри c

Ответы [ 2 ]

0 голосов
/ 16 июля 2020

Фактически, я исправил код и добавил al oop из 2 повторных попыток для HTTP-запросов, и, похоже, он работает: когда HTTP-запрос терпит неудачу, я повторяю его один раз (или количество повторных попыток, которое я хочу) и как правило, HTTP-запрос успешен во второй попытке. Но я до сих пор не знаю, почему HTTP-запросы иногда терпят неудачу.

0 голосов
/ 08 июля 2020

Если, как вы говорите, ошибка возникает из-за того, что сервер слишком загружен, запросы, в которых возникает ошибка, никогда не доходят до контроллера. На самом деле сервер даже не может поставить их в очередь. Так что вы не сможете их обработать, если не добавите дополнительный сервер, который получает запросы от клиента, пересылает их на ваш сервер, а затем

  • , если ответ в порядке, пересылает ответ клиенту
  • else обрабатывает ошибку

В реальном сценарии ios вы используете балансировщик нагрузки, чтобы разделить нагрузку запроса между несколькими серверами

...