如何从 ASP.NET SignalR 客户端中的 ChannelReader 读取
How to read from ChannelReader in ASP.NET SignalR client
我有一个基于 ASP.NET SignalR(非核心)的现有项目。我需要在不使用大量内存的情况下将大文件流式传输到客户端。我找到了许多使用 aspnetcore 执行此操作的示例,但不是遗留的 asp.net.
我的服务器端实现很简单,就像一个 aspnetcore 示例。
public ChannelReader<byte[]> Download()
{
var path = "path/to/file.big";
var channel = Channel.CreateUnbounded<byte[]>();
_ = WriteToChannel(channel, path);
return channel.Reader;
async Task WriteToChannel(ChannelWriter<byte[]> writer, string path)
{
using (FileStream fs = File.OpenRead(path))
{
var buffer = new byte[8 * 1024];
while (await fs.ReadAsync(buffer, 0, buffer.Length) > 0)
{
await writer.WriteAsync(buffer);
}
writer.Complete();
}
}
}
但是在客户端,示例要我使用:
_connection.StreamAsChannelAsync<byte[]>("Download");
这在旧版 asp.net 中不可用。我尝试使用:
IHubProxy.Invoke<ChannelReader<byte[]>>("Download");
但是客户端代码只是阻塞,我不知道发生了什么。
有谁知道如何在 asp.net signalr 中使用此技术?或者你能推荐任何其他技术吗?
我试图避免跳出并使用传统的网络 api 和 http 客户端,因为带有身份验证的信号器基础结构已经到位。我觉得信号器方法应该很简单,我只是找不到任何旧的例子。一切以aspnetcore为中心。
流式传输是在 SignalR CORE 中引入的,在 SignalR ASP.NET 中不可用。
对于 SignalR ASP.Net,您需要向文件提供 link 或执行一些操作,例如在集线器中将文件编码为 base64 字符串并在客户端对其进行解码。
我有一个基于 ASP.NET SignalR(非核心)的现有项目。我需要在不使用大量内存的情况下将大文件流式传输到客户端。我找到了许多使用 aspnetcore 执行此操作的示例,但不是遗留的 asp.net.
我的服务器端实现很简单,就像一个 aspnetcore 示例。
public ChannelReader<byte[]> Download()
{
var path = "path/to/file.big";
var channel = Channel.CreateUnbounded<byte[]>();
_ = WriteToChannel(channel, path);
return channel.Reader;
async Task WriteToChannel(ChannelWriter<byte[]> writer, string path)
{
using (FileStream fs = File.OpenRead(path))
{
var buffer = new byte[8 * 1024];
while (await fs.ReadAsync(buffer, 0, buffer.Length) > 0)
{
await writer.WriteAsync(buffer);
}
writer.Complete();
}
}
}
但是在客户端,示例要我使用:
_connection.StreamAsChannelAsync<byte[]>("Download");
这在旧版 asp.net 中不可用。我尝试使用:
IHubProxy.Invoke<ChannelReader<byte[]>>("Download");
但是客户端代码只是阻塞,我不知道发生了什么。
有谁知道如何在 asp.net signalr 中使用此技术?或者你能推荐任何其他技术吗?
我试图避免跳出并使用传统的网络 api 和 http 客户端,因为带有身份验证的信号器基础结构已经到位。我觉得信号器方法应该很简单,我只是找不到任何旧的例子。一切以aspnetcore为中心。
流式传输是在 SignalR CORE 中引入的,在 SignalR ASP.NET 中不可用。
对于 SignalR ASP.Net,您需要向文件提供 link 或执行一些操作,例如在集线器中将文件编码为 base64 字符串并在客户端对其进行解码。