5

也在这里作为一个问题打开了这个,但希望有人看到这个..

我有一个实现 IConnected/IDisconnect 的非常简单的集线器。在一个独立的项目中,这个集线器的测试结果很好。

当我将它放到我已经有一些其他集线器的实际项目中时,添加它会导致没有集线器可用(确认没有集线器出现在 /signalr/hubs 中)。然后我在这个集线器中注释掉 IConnected/IDisconnect 并重新编译,它与其余部分一起显示。重新添加接口打破了这一切。

有没有人见过这个?是否缺少某些配置或什么?

public class ChatHub : Hub, IConnected, IDisconnect
{
    public void Test(string message)
    {

    }

    public System.Threading.Tasks.Task Connect(IEnumerable<string> groups)
    {
        this.Clients.onNewUserOnline(Context.ConnectionId);
        return new Task(() => { });
    }


    public Task Reconnect(IEnumerable<string> groups)
    {
        this.Clients.onNewUserOnline(Context.ConnectionId);
        return new Task(() => { });
    }

    public Task Disconnect()
    {
        this.Clients.onUserOffline(Context.ConnectionId);
        return new Task(() => { });
    }
}
4

1 回答 1

7

这是指向类似问题的链接。 有没有办法获取 Signalr 集线器组中的连接数?

如果那没有帮助您可以查看 SignalR 0.5.1 中的新连接状态内容

连接状态更改

SignalR 连接对用户来说一直是一个黑盒子,这使得很难检测到底层连接状态的变化。我们在 JavaScript 和 .NET 客户端中公开了一个新的 stateChanged 事件。这使您可以侦听状态更改并以不同的方式对其做出反应。这是一个示例,如果连接进入重新连接状态并且 10 秒后没有恢复,则向用户显示一条消息:

var chat = $.connection.chat;
var timeout = null;
var interval = 10000;
chat.addMessage = function (msg) {
    $('#messages').append('<li>' + msg + '</li>');
};
$.connection.hub.stateChanged(function (change) {
    if (change.newState === $.signalR.connectionState.reconnecting) {
        timeout = setTimeout(function () {
            $('#state').css('backgroundColor', 'red')
                .html('The server is unreachable...');
        }, interval);
    } else if (timeout && change.newState === $.signalR.connectionState.connected) {
        $('#state').css('backgroundColor', 'green')
            .html('The server is online');
        clearTimeout(timeout);
        timeout = null;
    }
});
$.connection.hub.start();
于 2012-06-12T02:39:33.833 回答