Чтение тела запроса, проведенного из -за того, что данные поступают слишком медленно. Смотрите MinrequestbodyDatarateC#

Место общения программистов C#
Ответить
Anonymous
 Чтение тела запроса, проведенного из -за того, что данные поступают слишком медленно. Смотрите MinrequestbodyDatarate

Сообщение Anonymous »

Использование ASP.NET CORE 2.2, My REST API в производственных встречах, спорадические ошибки плохого запроса: < /p>

Чтение тела запроса, проведенного из -за слишком медленно. См. MinrequestbodyDatarate

В производственной среде, запросы обычно представляют собой смесь быстрых и медленных подключений. Будьте достаточно низким, чтобы запустить настройку Kestrel 240B/S MINBodyDatarate)
Исключение поднимается в пользовательском классе TextInputFormatter, на jarray.load Call:

public override Task ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
{
var stream = context.HttpContext.Request.Body;

using (var reader = context.ReaderFactory(stream, encoding))
using (var jsonReader = new JsonTextReader(reader))
{
// Don't close the request stream because you many need it in other middleware or controllers.
jsonReader.CloseInput = false;

bool isSuccessful = true;
List model = null;

try
{
Assembly assembly = typeof(BaseCommand).Assembly;

// here we're reading and parsing the json array directly from the stream
var objCollection = JArray.Load(jsonReader);
Log.Information("Json message:{0}", JsonConvert.SerializeObject(objCollection));

model = objCollection
.Select((obj) =>
{
// here some code mapping the incoming data to the internal type BaseCommand
// ...

return mappedCmd;
}).ToList();
}
catch (Exception ex)
{
Log.Error(ex, "Error parsing BaseCommand");
isSuccessful = false;
}

if (isSuccessful)
{
if (model == null && !context.TreatEmptyInputAsDefaultValue)
return InputFormatterResult.NoValueAsync();
else
return InputFormatterResult.SuccessAsync(model);
}

return InputFormatterResult.FailureAsync();
}
}
< /code>
После того, как на сервере есть 5 или 6 активных запросов (согласно нашей Haproxy), мы начинаем получать около 12% ошибок. Ошибка.
После прочтения этого потока я подозревал голод потока, и поэтому я асинхронизировал метод (используя wait jarray.loadasync () вместо Jarray.load () ), а также увеличил количество mindthread threatpool (10 вместо 1): противоположный моему ожиданию, это не имело эффекта на все! ЦП и диагностика памяти, и они не насыщены: никогда не превышают 15% ЦП и 10% памяти.>

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-minreque
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»