«Неожиданный конец содержимого запроса» при попытке прочитать тело запросаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 «Неожиданный конец содержимого запроса» при попытке прочитать тело запроса

Сообщение Anonymous »

У нас есть камера Hikvision с автоматическим распознаванием номерных знаков (модель DS-2CD4A26FWD-IZS/P)
Это то, что в настоящее время камера отправляет на наш прослушивающий сервер (обратите внимание на 0 байтов). image) :
https://pastebin.com/raw/z5Bzjthh
Я не знаю, почему он пытается отправить пустое изображение - но мне все равно, потому что для меня важны только данные - это фактический номерной знак.
Это конечная точка теста, которую мы пытаемся использовать для получения этих данных:

Код: Выделить всё

    [HttpPost]
[Route("/camera/event")]
[SwaggerOperation("EventReceived")]
[SwaggerResponse(statusCode: 200, type: typeof(Response), description: "OK")]
public async Task EventReceived()
{
try
{
var path = @$"c:\Temp\camera-{DateTime.UtcNow:yyyy-MM-dd-HH-mm-ss-fff}-data.log";
using var fileStream = System.IO.File.Create(path);

await Request.Body.CopyToAsync(fileStream);
return $"File {path} created";
}
catch (Exception ex)
{
_log.Error($"Error parsing request: {ex.Message}");
return $"Error parsing request: {ex.Message}";
}
}
Однако я получаю исключение «Неожиданное завершение содержимого запроса». Эта ошибка не случайна и не вызвана какими-то случайными сетевыми проблемами — она возникает всегда, при каждом отдельном соединении.
Я не могу воспроизвести эту проблему без реальной камеры — я даже пытался это сделать HTTP-сессия вручную через Putty, отправка тех же данных - и все работает.
Я тоже пробовал:

Код: Выделить всё

    var boundary = Request.GetMultipartBoundary();
var reader = new MultipartReader(boundary, HttpContext.Request.Body);
var section = await reader.ReadNextSectionAsync()
await section.Body.CopyToAsync(fileStream);
С тем же результатом.
Насколько я тестировал, каждая попытка прочитать Request.Body вызывает это исключение. Даже вручную прочитав первый байт из потока:

Код: Выделить всё

await Request.Body.ReadAsync(buffer, 0, 1)
Пытаясь выяснить источник проблемы, я установил Fiddler и настроил его для работы в качестве прокси - и внезапно все работает как положено, и все содержимое сообщения было правильно зарегистрировано без каких-либо ошибок. .
Не могу понять, почему прямое подключение к webapi заканчивается исключением, а подключение через прокси-сервер Fiddler волшебным образом это исправляет. Любая помощь?

Подробнее здесь: https://stackoverflow.com/questions/792 ... quest-body
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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