【问题标题】:Can't call javascript client method in signalr无法在信号器中调用 javascript 客户端方法
【发布时间】:2017-06-19 07:25:58
【问题描述】:

以下代码在 IIS Express 中运行良好,但在 IIS10 中失败。

奇怪的是服务器端方法可以成功调用,而客户端方法不能。

JavaScript

var hub = $.connection.liveRoomHub;
hub.client.addMessageToPage = function(data){
    debugger;//here, this method never gets invoked
    console.log(JSON.stringify(data));
};
$.connection.hub.start()
    .done(function() {
        hub.server.join('room1')
        .done(function(){
            debugger; //code can run into here
            hub.server.sendMessage('user','test','room1');
        })
    });

C#

public class LiveRoomHub : Microsoft.AspNet.SignalR.Hub
{
    public ILogger Logger { get; set; }

    public async Task SendMessage(string name, string message, string roomName)
    {
        await Clients.Group(roomName)
            .addMessageToPage(new
            {
                Name = name,
                Message = message
            });
        Logger.Info($"{name}send msg:{message}in room:{roomName},");//logged
    }

    public async Task Join(string roomName)
    {
        await Groups.Add(Context.ConnectionId, roomName);
        Logger.Info($"{Context.ConnectionId} enter room: {roomName}");//logged
    }
}

【问题讨论】:

  • 任何人都知道如何结束这个问题。
  • 杰克,你现在应该可以接受你自己的答案了。但是,您能在上面的问题中举一个“失败”的例子吗?
  • 感谢您的建议 Michael,但我无法提供有关上述代码如何失败的更多信息。 js代码只是静默失败:client hub方法不执行,没有异常也没有警告。

标签: asp.net signalr aspnetboilerplate


【解决方案1】:

好的,问题解决了。

我正在使用 aspnetboilerplate,abp.signalr.js 在我的 JavaScript 代码加载之前自动调用集线器连接。

显然,当时我的hub.client.addMessageToPage还没有注册。

这是常见的Connection started before subscriptions are added 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多