在我目前的设置中,我运行了一个ASP.NET 5 vNext项目。 我已经设置了SignalR Server 3.0.0-rc1-final,我可以通过我的网络接口连接到我的集线器:
var visitorHub = $.connection.visitorsHub;
visitorHub.client.visitorEvent = function (message) {
$("#visitorinfo").append("<li>" + message + "</li>");
};
$.connection.hub.start().done(function () {
visitorHub.invoke("listenToEvents", "TestID");
});
因此我们正在侦听来自集线器的 visitorEvent ,并在调用 listenToEvents 时调用visitorEvent。
我现在面临的挑战是,我试图从ASP.NET应用程序中进行通知。使用IoC中的构建, SqlDependency 用于侦听SQL Server中的事件。这又是按预期工作的,但是当我试图通过它调用集线器 HubContext 时没有任何反应。
我已经注入了 IConnectionManager 并且能够使用以下方法获取 HubContext :
var context = this.manager.GetHubContext<VisitorsHub>();
但是当我执行以下操作时:
context.Clients.All.visitorEvent("2");
没有任何反应。
我不确定为什么没有任何反应以及我将如何调试此内容?
我的VisitorHub代码是:
public class VisitorsHub : Hub
{
public async Task ListenToEvents(string visitorId)
{
this.NotifyVisitorListeners();
}
public void NotifyVisitorListeners()
{
this.Clients.All.visitorEvent("Event");
}
}
答案 0 :(得分:1)
您可以通过以下方式启用客户端日志记录:
$.connection.hub.logging = true;
$.connection.hub.start();
或没有生成代理:
var connection = $.hubConnection();
connection.logging = true;
connection.start();
否则,当使用invoke
(没有代理的方法)时,方法不会重命名为camelCase,但保留原样,就像CamelCase一样。
要解决此问题,您只需在两端重命名方法名称,或在后端添加HubMethodName
装饰器:
[HubMethodName("listenToEvents")]
public async Task ListenToEvents(string visitorId)
{
this.NotifyVisitorListeners();
}