Как отправить непрерывный поток в ASP Core REST API - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь отправить непрерывный поток из приложения C # в ASP Core REST API.

Я определяю непрерывный поток как, например, кто-то говорит в микрофон, а звук отправляется напрямую,без сохранения в локальном файле) в Rest API для сохранения в файл.

Я много раз искал в Google что-то подобное и до сих пор не нашел ничего действительно полезного.

Я пытался эмулировать его, отправив большой файл (297 МБ).

Это то, что у меня есть на стороне клиента:

string TARGETURL = "http://localhost:58000/api/file/";
string filePath = @"G:\Voice\Samples\The Monkey's Paw.wav";

byte[] fileContent = File.ReadAllBytes(filePath);
var dummyStream = new MemoryStream(fileContent);
var inputData = new StreamContent(dummyStream);
HttpResponseMessage response = this._httpClient.PostAsync(TARGETURL, inputData).Result;
HttpContent result = response.Content;

if (response.IsSuccessStatusCode)
{
  string contents = result.ReadAsStringAsync().Result;
}
else
{
  // do something
}

И на стороне сервера:

[Route("")]
[HttpPost]
public async Task<JsonResult> Post()
{
  Dictionary<string, object> rv = new Dictionary<string, object>();

  try
  {
    string file = Path.Combine(@"G:\Voice\Samples\dummy.txt");
    using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write,
        FileShare.None, 4096, useAsync: true))
    {
      await Request.Body.CopyToAsync(fs);
    }

    // complete the transaction
    rv.Add("success", true);
    rv.Add("error", "");
  }
  catch(Exception ex)
  {
  }
  return Json(rv);
}

Когда я отправляю файл, сервер выдает следующее исключение:

Content-Length запроса 1313137380 больше, чем ограничение размера тела запроса 30000000.

Я знаю, что мог бы увеличить предел размера тела, но это не долгосрочное решение, поскольку длина потока могла бы быть больше, чем любой предел, который я установил.

Вот почему я стараюсьng, чтобы найти решение, которое отправляет поток частями на сервер, чтобы перестроить и записать в файл.

1 Ответ

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

Что вы, вероятно, хотите сделать, это использовать другой сетевой стек.Веб-приложение всегда будет пытаться встроить все в HTTP.Это очень специфический способ общения.И REST также построен на основе этих идей.Как правило, это всего лишь документ со ссылками в Интернете, и REST является продолжением этой идеи.

Однако он опирается на некоторые другие замечательные технологии, которые могут лучше удовлетворить ваши потребности.

Ничто не мешает вам пользоваться Интернетом, но, возможно, вам нужно взглянуть на реализацию уровня UDP или TCP.Имейте в виду, что вы все равно будете отправлять информацию в пакетах.В интернете нет такого понятия, как постоянный поток битов.Звуковая волна в реальном мире - это бесконечная вещь, но компьютеры - это мусор.

Возможно, начнем с рассмотрения использования сокетов и такой библиотеки, как NAudio .

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