SignalR错误无法将类型'System.Threading.Tasks.Task <object>'隐式转换为'string'

时间:2016-07-12 20:11:16

标签: javascript c# signalr

我正在尝试从我的c#hub类调用一个方法但是当我尝试从javascript代码返回一个字符串时,我得到一个System.Threading.Tasks.Task而不是字符串。我想知道如何编辑javascript方法以返回实际的字符串。

这是集线器类:

public String getMessage(int id)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
        var s = hubContext.Clients.All.getMessage(id);


        return s;

    }

JavaScript的:

chat.client.getMessage = function (id) {
                for (i = 0; i < messageArr.length; i++) {
                    if (messageArr[i].ID == id) {
                        var s = messageArr[i].ID + messageArr[i].Name + messageArr[i].Content;
                        window.alert(s);
                        return s;
                    }
                }
            }

1 个答案:

答案 0 :(得分:2)

SignalR不支持从客户端到集线器的返回值。 Clients.All返回的任务将在调用所有客户端后完成。

如果您想要从客户端返回值,则必须使用正确的值手动调用集线器,并使用您自己的消息ID匹配调用者。

请参阅documentation

  

您无法从客户端方法获取返回值;语法如int   x = Clients.All.add(1,1)不起作用。