Мы работаем над проектом, и вот некоторые детали:
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.Было бы сложно поделиться полным исходным кодом.