【问题标题】:Is there a way to avoid SignalR when uploading files in Blazor Server-Side在 Blazor 服务器端上传文件时有没有办法避免 SignalR
【发布时间】:2020-07-20 10:22:33
【问题描述】:

我有一个 Blazor 应用(服务器端),它作为 应用服务 托管在 Azure 中,我使用 Azure SignalR 服务 能够扩展同时连接的用户数量。我还有一个页面可以上传文件,文件可能很大,甚至 1GB 甚至更多,我正在使用 Tewr.Blazor.FileReader (Nuget) 读取文件并上传到将文件保存到服务器的 API。 但我想知道在上传文件时是否可以通过某种方式避免 SignalR 部分,因为对于 2GB 文件,Azure SignalR 将每条消息分成 2KB/每条,这表示我达到了 1M 消息/天/单位的限制,仅用于上传 1 个文件。 让我知道我可以解决这个问题的所有方法,目前我想到的解决方案很少:

  • 将单独的 SignalR 应用程序 托管为 应用程序服务,而不是使用 Azure SignalR
  • iframe 将该页面添加到 ASP.NET Core 应用程序,该应用程序只处理文件的传输。 (不确定这是否会触发 SignalR 流量

【问题讨论】:

  • 您是否尝试在 SignalR 配置中更改 ApplicationMaxBufferSizeTransportMaxBufferSizeThere is a library vendor sample
  • @ASpirin 这不会解决问题,它会影响使用内置 SignalR 时的上传速度,但 Azure SignalR 默认情况下会将任何大于 2KB 的消息分解为 2KB/每个并处理它们。 (我可以有 10MB 的块,但是当它到达 Azure SignalR 服务时会被分解)
  • 您确定要通过 SignalR 进行此操作吗?与普通的 HTTP API 端点相反?
  • 有没有试过加石头JavsScript在浏览器中读取文件,然后http直接发布到api端点?
  • @HenkHolterman 我绝对想使用普通的 HTTP API 端点,但问题是,我如何实现它,据我所知,一切都通过 SignalR 与 Blazor 服务器端

标签: javascript c# azure signalr blazor


【解决方案1】:

如果您使用标准 DOM 事件(例如 onchanged=someJavaSciptFunction),则浏览器将运行 JavaScript 以响应该事件。

如果您在 UI 元素上设置了适当的 JS 脚本,那么您可以让 JS 向您的 API 发出 HTTP 请求。这将完全避免 SignalR。

【讨论】:

    【解决方案2】:

    您可以将文件上传到 Web API 控制器。您甚至可以在同一个项目中添加控制器。 我认为DevExpress Blazor FileUpload使用了这种方法。

    但是自己实现应该很容易。您需要一些将文件内容发布到 Web API 控制器的 javascript。 This blog entry 可以帮到你。

    【讨论】:

      猜你喜欢
      • 2020-04-19
      • 1970-01-01
      • 2019-03-11
      • 2019-09-07
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多