从SignalR3 rc1 vnext应用程序中调用方法时不会发生任何事情
本文关键字:任何事 方法 rc1 SignalR3 vnext 应用程序 调用 | 更新日期: 2023-09-27 18:25:40
在我当前的设置中,我有一个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服务器中的事件。同样,这是按预期工作的,但当我试图通过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");
}
}
您可以通过以下方式启用客户端日志记录:
$.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();
}