我正在使用 signalR 1.0.0-alpha2-final,并希望向所有连接的客户端发送消息。
我已经以这个教程为起点:this tutorial。
我的 RulesHub 继承自 Hub:
我已经以这个教程为起点:this tutorial。
我的 RulesHub 继承自 Hub:
[EnableCors("MyPolicy")]
public class RulesHub : Hub
{
private readonly IRuleService _ruleService;
public RulesHub(IRuleService ruleService)
{
_ruleService = ruleService;
}
public Task Send()
{
var rules = _ruleService.RulesMonitoring();
return Clients.All.InvokeAsync("SendRules", rules);
}
}
在前端,我有以下代码来连接到Hub:
let connection = new signalR.HubConnection(rulesMonitorUrl);
connection.on('SendRules', function(data:any){
console.log(data);
});
在连接了一个客户端之后,我从这个控制器调用Send方法:
[EnableCors("MyPolicy")]
Route("api/[controller]")]
public class MyController : Controller
{
private readonly IMyService _myService;
private RulesHub _rulesHub;
public MyController(IMyService myService, IRuleService ruleService)
{
_myService = myService;
_rulesHub = new RulesHub(ruleService);
}
[HttpPost]
public void Post([FromBody]MyClass myClass)
{
_myService.Add(myClass);
_rulesHub.Send();
}
}
但是代码行return Clients.All.InvokeAsync("SendRules", rules);
会导致以下异常信息:
System.NullReferenceException:“对象引用未设置到对象实例。”
Microsoft.AspNetCore.SignalR.Hub.Clients返回了null。
我读到在ASP.NET中应该使用类似于IHubContext context = GlobalHost.ConnectionManager.GetHubContext("MyChatHub");
的语句,但在这个版本中无法使用。
有什么想法吗?