客户端未在SignalR 2.2应用中接收消息

时间:2019-05-09 11:54:48

标签: signalr asp.net-core-signalr

在我的应用程序中,我想在用户登录但客户端未从集线器接收消息时更新客户端。

我创建了一个Hub类:

    public class GameHub : Hub
    {
        public async Task UserLoggedIn(string userName)
        {
            await Clients.All.SendAsync("UserLoggedIn", userName);
        }
    }

UserLoggedIn是在用户登录时执行的,我设置了一个断点,并且明确调用了UserLoggedIn上的GameHub方法。

我在客户端页面上

        const connection = new signalR.HubConnectionBuilder()
            .withUrl("/gameHub")
            .configureLogging(signalR.LogLevel.Information)
            .build();

        connection.start().then(() => {
            console.log("connected");
        });

        connection.on("UserLoggedIn", (userName) => {
            console.log("User Logged In" + userName);
        });

在另一个隐身浏览器的控制台窗口中,我看到“已连接”,但是在GameHub上调用该方法后,看不到“用户已登录”

有人在这里看到我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

您没有收到有关隐身浏览器的消息,因为您仅在Signalr上收听而未调用它,所以我将代码更改为此

public class GameHub : Hub
{
    public async Task UserLoggedIn(string userName)
    {
        await Clients.All.SendAsync("SendUserLoggedInMessage", userName);
    }
}

然后用js代码

<script>
    const connection = new signalR.HubConnectionBuilder()
        .withUrl("/gameHub")
        .configureLogging(signalR.LogLevel.Information)
        .build();

    connection.start().then(() => {
        console.log("connected");
    });

    // listen on SendUserLoggedInMessage
    connection.on("SendUserLoggedInMessage", (userName) => {
        console.log("User Logged In" + userName);
    });

    // invoke UserLoggedIn method
   connection.send("userLoggedIn", username)
              .then(() => console.log("something"));

</script>