从SignalR3 rc1 vnext应用程序中调用方法时没有任何反应

时间:2015-12-04 08:02:08

标签: c# asp.net signalr signalr-hub

在我目前的设置中,我运行了一个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");
    }
}

1 个答案:

答案 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();
}