Javascript 调用 SignalR 集线器方法没有 return 值

Javascript call to a SignalR hub method doesn't return a value

我正在为我的网站编写一个聊天室页面,但我 运行 遇到了一些麻烦。我想确保聊天室参与者使用的名称是唯一的。集线器 class 本身包含一个 List<> 已经参与聊天的参与者,因此我向 class 添加了一个方法来检查是否存在已使用的名称:

    public bool UserNameInUse(string name)
    {
        UserDetail item = ConnectedUsers.FirstOrDefault(x => x.UserName == name);
        return (item.ConnectionId == null);
    }

在 Javascript 端,我尝试调用集线器方法来检查名称是否已在开始连接之前使用,如下所示:

   $("#btnStartChat").click(function () {

    var name = $("#txtNickName").val();
    if (name.length > 0) {
        var status = chatHub.server.userNameInUse(name);
        alert(status);
        if (status!=1)
            chatHub.server.connect(name);
        else
            alert("The name you chose is already in use.  Try a different one, please.");
    }
    else {
        alert("Please enter a name to use for this chat.");
    }
});

如您所见,我对调用进行了检测,以查看正在 returned 的内容。但不是从集线器方法调用中获取值 (确实触发了,因为我在Visual Studio调试模式下测试了它),这是我从警告框中得到的:

我试过将 return 类型更改为字符串并将文本发送回 int 和 returning 数字,但每次 运行 代码。谁能帮我理解为什么调用没有 return 值?

您需要注册回调函数以接收服务器响应,例如

chatHub.server.UserNameInUse(name).done(function (isInUse) {
    if (isInUse) {
       // Server returned true
    } else {
       // Server returned false
    }
}).fail(function (error) {
    console.log('Invocation of UserNameInUsefailed. Error: ' + error);
});

有关详细信息,请在此处查看 SignalR 文档

How to call server methods from the client