2012-12-10 13 views
6

Ho problemi con OnConnected e On Onride disconnesse nel mio hub non si attiva.SignalR OnConnected e OnDisconnected non attivati ​​

Per gli scopi di replica, ho un semplice hub:

public class OnlineHub : Hub 
{ 
    public void TestMethod() 
    { 
     var a = 1; 
    } 

    public override System.Threading.Tasks.Task OnConnected() 
    { 
     return Clients.All.connected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 

    public override System.Threading.Tasks.Task OnDisconnected() 
    { 
     return Clients.All.disconnected(Context.ConnectionId, DateTime.Now.ToString()); 
    } 
} 

e una pagina aspx:

<script type="text/javascript"> 
    $(function() { 
     $("#btn").click(function() { 
      $.connection.onlineHub.server.testMethod(); 
     }); 

     $.connection.onlineHub.server.connected = function (id, date) { 
      $("#results").append("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.server.disconnected = function (id, date) { 
      $("#results").append(("connected: " + id + " : " + date + "</br>"); 
     }; 

     $.connection.onlineHub.connection.start(); 
    }); 

</script> 

sto usando jQuery 1.6.4 e signalR 1.0.0-alpha2. I metodi connessi e disconnessi lato client non vengono eseguiti. E se inserisco un breakpoint in OnConnected o OnDisconnected, i punti di interruzione non colpiscono.

La connessione viene stabilita mentre il mio TestMethod chiama ok e sto ricevendo una connessione e ritorno dalla chiamata negoziata di signalR.

Sono sicuro che mi manca qualcosa di semplice.

Grazie in anticipo.

risposta

11

i gestori client dovrebbero probabilmente simile a questa:

$.connection.onlineHub.client.connected = function(){...} 
+0

Grazie per la risposta, in questo caso, il modo in cui sto facendo è corretto in quanto non è un gestore in quanto tale, ma una definizione di un metodo che il server può chiamare. Grazie comunque comunque. :) – DavidGouge

+2

Sono abbastanza sicuro di aver ragione! https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client –

+0

Non funziona per me. https://stackoverflow.com/questions/47157099/signalr2-onconnected-not-working-as-per-documentation – Developer

2

capito. Stavo chiamando i metodi sull'oggetto server anziché al client:

$.connection.onlineHub.server.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.server.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

dovrebbe essere

$.connection.onlineHub.client.connected = function (id, date) { 
     $("#results").append("connected: " + id + " : " + date + "</br>"); 
    }; 

    $.connection.onlineHub.client.disconnected = function (id, date) { 
     $("#results").append(("connected: " + id + " : " + date + "</br>"); 
    }; 

Quindi sembra che se signalR non ha ottenuto nulla definito per l'operazione entro l'OnDisconnected o OnConnected , quindi non vengono licenziati. Il che ha senso.

+4

Dovresti contrassegnare la risposta di @ Duncan come buona, dato che aveva ragione! – billy

+1

La risposta giusta è @ Duncan, dato che l'ha postata mezz'ora prima! –

+3

Sì, grazie @Matei_Radu per aver risposto in modo così rapido a una domanda di 3 anni. Dove sarebbe questo sito senza di te !? – DavidGouge

5

Si scopre inoltre che in uno script è necessario definire almeno un callback del client per gli eventi da sollevare sull'hub. Prestare attenzione a questo quando si prevede di chiamare OnConnected e OnDisconnected.

+0

Dai anche un'occhiata a questo https://coderwall.com/p/5oykeq/be-careful-about-ondisconnected-when-using-signalr –

Problemi correlati