not mvc method hubs hub from found signalr signalr-hub

mvc - El evento On en el SignalR Client Hub no se llama



signalr server (2)

Parece que tengo un problema con JS Client Hub de SignalR.

El problema es que el controlador ''on'' no parece funcionar, no genera ningún error pero no recibe ninguna señal enviada por el servidor. El código a continuación muestra un extracto donde llamo al servidor (usando la invocación) que funciona bien; luego, en el servidor, vuelvo a llamar a acceptHubData, que debe recogerse en el cliente pero no es así.

Mi objetivo es cuando navego a las páginas que cada página abrirá una conexión a un concentrador específico y libera esta conexión cuando el usuario se mueve a otra página.

EDITAR : usar el siguiente fragmento de código funciona, pero me pregunto por qué el código más abajo que usa el evento ''on'' no funciona.

var superHub = $.connection.mySuperHub; superHub.client.acceptHubData = function (data) { $(''<li>hello there'' + data + ''</li>'').prependTo($(''#ul1'')) } $.connection.hub.start().done(function () { $(''<li>done phase 1</li>'').prependTo($(''#ul1'')) });

Cualquier ayuda sería muy apreciada!

Este es el código del cliente (en js)

$(document).ready(function () { var myHub; try { var connection = $.hubConnection(); connection.start().done(function () { myHub = connection.createHubProxy("mySuperHub"); myHub.on(''acceptHubData'', function (data) { alert(data); // THIS IS NOT CALLED! }); myHub.invoke(''AcceptSignal'', "hello from the client2"); }); } catch (e) { alert(e.message); } });

Este es el código del servidor:

[HubName("mySuperHub")] public class MyHub : Hub { private readonly HubEngine _hubEngine; public MyHub() : this(HubEngine.Instance) { } public MyHub(HubEngine hubEngine) { _hubEngine = hubEngine; } public void AcceptSignal(string msg) { Clients.Caller.acceptHubData("hi"); Clients.All.acceptHubData("hi"); } }


Aún puede usar el método on para agregar eventos para las llamadas de método de hub del cliente JS en la última versión de SignalR, pero si no agrega ningún detector de eventos a un hubProxy antes de llamar a hubConnection.start() , no estará suscrito al cubo. SignalR se suscribe a los concentradores para los que tiene controladores de eventos cuando se inicia hubConnection . Si no está suscrito a su concentrador, agregar cualquier evento a ese concentrador después de que start () no funcionará.

Si agrega al menos un detector de eventos al concentrador antes del inicio (), incluso si no hace nada, puede agregar cualquier controlador de eventos adicional que desee al concentrador usando después del inicio () y se llamará a sus controladores. .

No importa si agrega un evento usando hubProxy.on(''eventName'', function (... o autogeneratedHubProxy.client.eventName = function (... antes de llamar a start() , pero solo se agregará correctamente al evento) Se llama a los oyentes después de start() .


No estoy seguro de qué versión de SignalR está utilizando, pero he tenido más éxito con la siguiente sintaxis en mi servidor:

var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>(); context.Clients.All.acceptHubData("hello");

y en mis clientes:

myHub.client.acceptHubData = function (data) { console.log(data); }