【发布时间】:2017-11-06 07:06:29
【问题描述】:
我正在使用 signalR 1.0.0-alpha2-final 并希望向所有连接的客户端发送消息。
我以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);
}
}
在前端我有这个代码来连接到集线器:
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.get 返回 null。
我已经读过在 ASP.NET 中你应该使用类似IHubContext context = GlobalHost.ConnectionManager.GetHubContext("MyChatHub"); 的东西,但这不适用于这个版本。
有什么想法吗?
【问题讨论】:
标签: c# signalr signalr-hub asp.net-core-2.0