Случайный 502.3 IIS - неверный запрос (частота увеличивается при увеличении размера запроса POST) - PullRequest
0 голосов
/ 29 сентября 2018

Мы работаем над проектом, и вот некоторые детали:

ASP.NET Core 2.1, MySQL, Entity Framework Core, Windows Server 2012 R2.

Мы развернули его наIIS.Когда мы тестируем сторону в локальной сети (IIS), она берет много данных (до 3 МБ).

Хотя, когда мы развернули его на нашем тестовом сервере (через Интернет), он начал отправлять нам 502,3 случайным образом (с 800 КБ данных), и частота увеличивается до более чем 80%, когда мы достигаем 2 МБ прибл.

С почтальоном, он сохраняет данные, и частота действительно низкая.Но при отправке запроса с мобильного устройства (например, iPhone - тот же запрос) сервер выбрасывает 502,3.

Обратите внимание, что в нашем API есть изображения в виде base64, а количество изображений может различаться.

Каков рекомендуемый размер полезной нагрузки после запроса (Rest API)?

Мы увеличили время ожидания aspcore до 23 часов.Кроме того, расследование с помощью FailedRequestLogs:

Мы получаем следующее:

FailedRequestLog Мы сократили настройку сознания сервера kestrel вместе с некоторыми другими.

Судя по журналам, запрос буферизации не был получен должным образом / полностью и запрос был перенаправлен для дальнейшей обработки.

A) Он не проходит аутентификацию, потому что токен носителя не был прочитан правильно, и он выдает 502.3 неверного запроса, время ожидания истекло

Вот журналы:

2018-09-28T01:29:15.2053179-07:00 0HLH53A197K0J:00000001 [INF] Request starting HTTP/1.1 POST http://URL application/json 1140717 (ca22a1cb)
2018-09-28T01:29:15.2061784-07:00 0HLH53A197K0J:00000001 [INF] "Bearer" was not authenticated. Failure message: "Authentication failed because the access token was expired." (48071232)
2018-09-28T01:29:15.2138975-07:00 0HLH53A197K0J:00000001 [INF] Authorization failed for user: null. (a4ab1676)
2018-09-28T01:29:15.2139666-07:00 0HLH53A197K0J:00000001 [INF] Authorization failed for the request at filter '"App.Filter.CustomAuthorizeFilter"'. (8b6446cb)
2018-09-28T01:29:15.2140926-07:00 0HLH53A197K0J:00000001 [INF] Executing JsonResult, writing value "Common.ResponseViewModel.ResponseOk". (7bb75e80)
2018-09-28T01:29:15.2143662-07:00 0HLH53A197K0J:00000001 [INF] Executed action "App.Controllers.MobileControllers.MobilePController.Contgroller (App)" in 0.5548ms (afa2e885)
2018-09-28T01:29:21.8587588-07:00  [INF] Connection id ""0HLH53A197K0J"" bad request data: ""Request timed out."" (86f1a409)
Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Request timed out.
2018-09-28T01:29:21.8999019-07:00 0HLH53A197K0J:00000001 [INF] Connection id ""0HLH53A197K0J"" bad request data: ""Request timed out."" (86f1a409)
Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Request timed out.
   at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.PipeCompletion.ThrowFailed()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.GetResult(ReadResult& result)
   at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.Pipe.Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.IReadableBufferAwaiter.GetResult()
   at Microsoft.AspNetCore.Server.Kestrel.Internal.System.IO.Pipelines.ReadableBufferAwaitable.GetResult()
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.MessageBody.<ConsumeAsync>d__24.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Frame`1.<ProcessRequestsAsync>d__2.MoveNext()
2018-09-28T01:29:21.9000756-07:00 0HLH53A197K0J:00000001 [INF] Request finished in 6694.7905ms 401 application/json; charset=utf-8 (791a596a)

Мы также увеличили FREB для того, чтобы получать всю информацию.

[Route("v1/initialIntervention")]
[HttpPost]
public async Task<IActionResult> SaveInitialIntervention([FromBody] InitialInterventionSaveViewModel initialInterventionSaveViewModel)
{
    ResponseViewModel responseViewModel = new ResponseViewModel();
    try
    {
        if (ModelState.IsValid)
        {
            ApplicationUser user = await _userManager.GetUserAsync(HttpContext.User);
            Patient patient = new Patient();
            new FieldMapper().MapFields(initialInterventionSaveViewModel, patient);
            responseViewModel  = _encounterManager.SaveInitialIntervention(initialInterventionSaveViewModel, patient, user);
            if (responseViewModel.Status == StatusCodes.Status201Created)
            {
                await _notificationManager.NotifyProvidersAndRep(patient.StudyCenterId, Messages.InitialInterventionNotificationMessage, user.Id, Request.Headers["Host"], (int)EncounterType.InitialIntervention);
            }
        }
        else
        {
            if (initialInterventionSaveViewModel == null)
            {
                responseViewModel.Status = StatusCodes.Status400BadRequest;
                responseViewModel.Response = new ResponseError
                {
                    Error = new ErrorViewModel
                    {
                        Code = (int)ErrorCodes.InvalidModelStructure,
                        Messages = new List<ResponseMessage> { new ResponseMessage { Message = Messages.InvalidDataStructure } }
                    }
                };
            }
            else
            {
                responseViewModel.Status = StatusCodes.Status400BadRequest;
                responseViewModel.Response = new ResponseError
                {
                    Error = new ErrorViewModel
                    {
                        Code = (int)ErrorCodes.InvalidModelData,
                        Messages = ModelState.Values.SelectMany(x => x.Errors).Select(x => new ResponseMessage { Message = x.ErrorMessage }).ToList()
                    }
                };
            }
        }
    }
    catch (Exception e)
    {
        responseViewModel = new ResponseViewModel()
        {
            Response = new ResponseError().Create((int)ErrorCodes.ExceptionOccured, e),
            Status = StatusCodes.Status500InternalServerError,
        };
    }

    return StatusCode(responseViewModel.Status, responseViewModel.Response);
}

Мы боимся, что вышеупомянутый исходный код никогда не начнет выполнение.Причина, по которой мы говорим об этом, заключается в том, что в отслеживании Failed Request он показывает 60-70% полученных Json (данных), а затем переходит с запроса на ответ с неверным запросом и в конечном итоге (повторяет) 502.3.Было бы сложно поделиться полным исходным кодом.

1 Ответ

0 голосов
/ 13 октября 2018

Проблема связана с истечением срока действия токена, мы установили 1 минуту истечения срока действия токена.Запрос занимал более 1 минуты из-за скорости интернета, которая в результате давала нам 502,3.

Хотя даже если вы установили 30-минутный срок действия токена и пользователь отправил запрос на 29-й минуте, такая же проблема может возникнуть.,

Я отмечаю это как ответ, но хотел бы, чтобы ваши мысли о том, как мы можем решить проблему, объяснены во втором абзаце выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...