javascript - SignalR 通过 IProgress从 js 客户端到集线器
问题描述
是否可以IProgress<T>
从 js 客户端传递到 C# SignalR 集线器?我想做的是:
在集线器一侧:
public class ProgressHub : Hub<IProgressHub>
{
public async Task Foo(string jobId, IProgress<int> progress)
{
Console.WriteLine($"Started monitoring {jobId}");
for (int i = 0; i < 100; i++)
{
await Task.Delay(TimeSpan.FromSeconds(1)); // Simulate some work
progress.Report(i);
}
}
}
public interface IProgressHub
{
Task Foo(string jobId, Progress<int> progress);
}
在js方面:
connection
.invoke("Foo", "this-is-job-id", progressPercentage => console.log(`Processed ${value}%`))
.then(() => console.log("Processing done"));
信号器集线器上的方法被调用,但 IProgress 总是最终为空。
解决方案
我刚刚在 ASP.NET SignalR 和 ASP.NET Core SignalR 之间的差异中找到了答案
在客户端和集线器(通常称为 HubState)之间传递任意状态的能力已被删除,以及对进度消息的支持。目前没有集线器代理的对应物。
最后我决定做以下事情:
在集线器端:RegisterToProgress([...])
它将在内部调用SendProgress([...])
将向客户端发送消息。
在 js 客户端:调用RegisterToProgress
和监听SendProgress
消息。
推荐阅读
- javascript - IntersectionObserver 未观察到回调中的目标不工作?
- c - 如何获取数字的前 2 位数字
- django - 从登录页面重定向到注册页面回到登录页面,在 django 的 url 中使用相同的参数
- javascript - 获取 HTML 元素的 CSS 选择器/路径
- r - 无法安装 tmap
- html - 带有 html 的 vuex getter
- math - 周长的平方除以面积是什么公式?
- python - 自定义 CNN 给出错误的输出形状
- javascript - 如何在具有更多轮播的页面中控制单个轮播?
- algorithm - 如何遍历该节点图以生成代码?