C# SignalR Core如何每n秒向客户端发送消息 又名“从后台服务向客户端发送消息”
我希望我的信号服务器每n秒更新一次仪表板。我现在正在使用这个:C# SignalR Core如何每n秒向客户端发送消息 又名“从后台服务向客户端发送消息”,c#,.net,signalr,signalr-hub,C#,.net,Signalr,Signalr Hub,我希望我的信号服务器每n秒更新一次仪表板。我现在正在使用这个: public class MyHub : Hub { public override Task OnConnectedAsync() { Observable.Interval(TimeSpan.FromSeconds(0.5)).Subscribe(l => { var alt = CalcAltitude(l); SendMes
public class MyHub : Hub
{
public override Task OnConnectedAsync()
{
Observable.Interval(TimeSpan.FromSeconds(0.5)).Subscribe(l =>
{
var alt = CalcAltitude(l);
SendMessage(alt);
});
return Task.CompletedTask;
}
private void SendMessage(double alt)
{
Clients.All.SendAsync("SendAction", new Status() {Altitude = alt});
}
private double CalcAltitude(long l)
{
return 100 * Math.Sin((double) l / 100) + 200;
}
}
public class Status
{
public double Altitude { get; set; }
}
当我的代码被执行时,它抛出一个异常,表示
无法访问已释放的对象
我怀疑我在这里做错了什么
那么,让用户及时向所有客户端发送消息的正确方法是什么呢?var-hubContext=GlobalHost.ConnectionManager.GetHubContext();
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
hubContext.Clients.All.SendnewData(Data);
hubContext.Clients.All.SendnewData(数据);
将此代码放在每秒更新或计算数据的位置
比如:数据库处理完成后,广播新数据
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Infrastructure;
using Microsoft.AspNet.Mvc;
public class TestController : Controller
{
private IHubContext testHub;
public TestController(IConnectionManager connectionManager)
{
testHub = connectionManager.GetHubContext<TestHub>();
testHub.Clients.All.SendnewData(Data);
}
}
使用Microsoft.AspNet.signal;
使用Microsoft.AspNet.signal.Infrastructure;
使用Microsoft.AspNet.Mvc;
公共类TestController:控制器
{
私有IHubContext测试中心;
公共测试控制器(IConnectionManager连接管理器)
{
testHub=connectionManager.GetHubContext();
testHub.Clients.All.SendnewData(数据);
}
}
好的,这次答案不是来自堆栈溢出,而是来自另一个来源
这可以在ASP.NET Core+SignalR Core中使用此代码完成
你需要两个零件
- 后台服务本身(更新客户端):
- 设置(接线)部分:
非常感谢您的回复 设置javascript interval以调用未找到signalR methodGlobalHost:(您能发布一个完整的工作示例吗?谢谢!添加了示例请检查这不是完整的答案,您介意用一个有意义且可操作的示例更新此示例,而不是链接这些站点(以防将来链接中断)