Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SignalR Core如何每n秒向客户端发送消息 又名“从后台服务向客户端发送消息”_C#_.net_Signalr_Signalr Hub - Fatal编程技术网

C# SignalR Core如何每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

我希望我的信号服务器每n秒更新一次仪表板。我现在正在使用这个:

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:(您能发布一个完整的工作示例吗?谢谢!添加了示例请检查这不是完整的答案,您介意用一个有意义且可操作的示例更新此示例,而不是链接这些站点(以防将来链接中断)