【问题标题】:SignalR client side method not firing on from server side button clickSignalR 客户端方法未从服务器端按钮单击触发
【发布时间】:2021-10-18 20:51:41
【问题描述】:

我有一个基于 Visual Studio 2019 的 SignalR 应用程序,客户端连接到服务器。

当页面加载并连接到正在运行的服务器时,会调用以下 javascript 函数,并且连接 ID 成功。

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)
            });
        }

    }

在服务器上,我正在执行以下测试代码来检查在 javascript html 页面中运行的函数。以下是代码。

private async void button1_ClickAsync(object sender, EventArgs e)
    {
        mhubContext = GlobalHost.ConnectionManager.GetHubContext<MobileStockTickerHub>();
        await mhubContext.Clients.All.showtradenotification("Hello");
    }

下面是集线器类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;
    }
    
    
}

同样,当button1_ClickAsync 被触发时,网页上没有任何活动,应该会触发showtradenotification 并显示警告消息。

让我知道我错在哪里。 谢谢。

【问题讨论】:

    标签: javascript asp.net-mvc signalr visual-studio-2019


    【解决方案1】:

    将您的客户端函数移到您的 hub.start 之前。在开始之前,您应该始终注册至少一个函数。请参阅docs 中的说明。

    【讨论】:

    • 是的,知道了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2021-03-27
    • 1970-01-01
    • 2019-07-05
    • 1970-01-01
    相关资源
    最近更新 更多