【问题标题】:How to send a continuous stream to a ASP Core REST API如何将连续流发送到 ASP Core REST API
【发布时间】:2018-10-25 10:24:01
【问题描述】:

我正在尝试从 C# 应用程序向 ASP Core REST API 发送连续流。

我将连续流定义为,例如有人对着麦克风说话,声音直接发送,不保存到本地文件)到 Rest API 以保存到文件。

我在 Google 上搜索了很多类似的东西,但到目前为止找不到任何真正有用的东西。

我一直在尝试通过发送一个大文件 (297MB) 来模拟它。

这是我迄今为止为客户端所做的:

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 304137380 大于请求正文大小限制 30000000。

我知道我可以增加主体大小限制,但这不是一个长期解决方案,因为流长度可能会比我设置的任何限制更长。

这就是为什么我试图找到一种解决方案,将流按块发送,以便服务器重建并写入文件。

【问题讨论】:

    标签: c# rest asp.net-core streaming


    【解决方案1】:

    您可能想要做的是使用不同的网络堆栈。 Web 应用程序总是会尝试将所有内容都放入 HTTP。这是一种非常特殊的交流方式。 REST 也是建立在这些想法之上的。事物通常被认为是在 Internet 上具有参考的文档,而 REST 是这种想法的扩展。

    不过,它确实位于其他一些可能更适合您需求的伟大技术之上。

    没有什么可以阻止您使用互联网,但也许您需要查看 UDP 或 TCP 级别的实现。请注意,您仍会以数据包的形式发送信息。互联网上没有恒定的比特流。现实世界中的声波是无限的,但计算机在这方面是垃圾。

    也许先看看at using sockets 和像NAudio 这样的库。

    【讨论】:

      猜你喜欢
      • 2021-09-06
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多