Tengo una aplicación SignalR basada en Visual Studio 2019, donde el cliente se conecta al servidor.
Se llama a la siguiente función de javascript cuando se carga una página y se conecta a un servidor en ejecución con una identificación de conexión exitosa.
function Connect() { $.connection.hub.url = url; stockTickerHubProxy = $.connection.mobileStockTickerHub; if (stockTickerHubProxy) { $.connection.hub.start().done(function () { console.log("Connected..."); connectionId = $.connection.hub.id; console.log(connectionId) stockTickerHubProxy.server.setUserName(code); }) .fail(function () { alert("Can't connect"); }) ; stockTickerHubProxy.client.addMessage = function (name, message) { console.log(name + ":" + message); } stockTickerHubProxy.client.showtradenotification = function (msg) { alert(msg) } $.connection.hub.disconnected(function () { console.log("Server disconnected."); }); $.connection.hub.reconnecting(function () { console.log("Server reconnecting..."); }); $.connection.hub.reconnected(function () { console.log("Server reconnected..."); Connect(); }); $.connection.hub.error(function (error) { console.log('SignalR error: ' + error) }); } }En el servidor, estoy ejecutando el siguiente código de prueba para verificar la función que se ejecuta en la página HTML de JavaScript. A continuación se muestra el código.
private async void button1_ClickAsync(object sender, EventArgs e) { mhubContext = GlobalHost.ConnectionManager.GetHubContext<MobileStockTickerHub>(); await mhubContext.Clients.All.showtradenotification("Hello"); } La siguiente es la clase hub MobileStockTickerHub
public class MobileStockTickerHub : Hub { //Called when a client is connected public override Task OnConnected() { _users.TryAdd(Context.ConnectionId, Context.ConnectionId); return base.OnConnected(); } public override Task OnDisconnected(bool stopCalled) { string username; _users.TryRemove(Context.ConnectionId, out username); return base.OnDisconnected(stopCalled); } public override Task OnReconnected() { _users.TryAdd(Context.ConnectionId, Context.ConnectionId); return base.OnReconnected(); } public string SetUserName(string userName) { _users[Context.ConnectionId] = userName; return "Received ping from " + userName; } } Nuevamente, cuando se dispara button1_ClickAsync , no hay actividad en la página web, eso debería disparar showtradenotification con un mensaje de alerta.
Déjame saber dónde estoy equivocado. Gracias.
Mueva su función de cliente antes de su hub.start. Siempre debe registrar al menos una función antes de comenzar. Consulte la nota sobre en los documentos .