2012-05-23 117 views
5

還開這是一個問題,但here希望有人看到這個..SignalR連接/斷開樞紐炸燬

我有一個非常簡單的樞紐實現IConnected/IDisconnect。在一個獨立的項目中,這個中心測試出色。

當我把它放到我已經有其他集線器的實際項目中時,添加它導致沒有集線器可用(確認沒有顯示在/ signalr /集線器中)。然後我在這個中心評論了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(() => { }); 
    } 
} 

回答

7

下面是一個類似的問題 Is there a way to get number of connections in Signalr hub group?

鏈接如果沒有幫助,你可以看看新的連接狀態的東西,在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();