从Hub类外部向用户发送消息

时间:2018-06-29 20:57:22

标签: javascript c# asp.net signalr

我是SignalR和Owin的新手,所以我可能会错过一些大的东西,但是在对Owin和signalR UserID进行了大约一个小时的研究之后,我有些困惑。我正在构建一个进度条以添加到现有应用程序中,并且需要在任务运行时向2-3分钟功能的特定用户显示进度。我可以使该应用程序向所有用户报告进度,但不能向任何特定用户报告进度。

我正在使用类LoadingBarFunctions从集线器外部调用signalR函数。这是该代码:

public class LoadingBarFunctions
{
    public static void SendProgress(int stepNum, int totalSteps, string progressMessage, string userID)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<LoadingHub>();
        hubContext.Clients.User(userID).ReportProgress((stepNum * 100.0 / totalSteps), progressMessage);
    }
}

如果我将User(userID)替换为All,则该应用程序将正常运行,但会向所有用户报告。上面的代码根本不起作用。

我正在加载栏页面上通过此函数调用SendProgress

protected void Button1_OnClick(object Source, EventArgs e)
{
    string connectionID = ConnectionIdVariable.Value;
    var totalSteps = 800;
    for (int i = 0; i <= totalSteps; i++)
    {
        Thread.Sleep(25);
        if ((i % 50) == 0)
        {
            LoadingBarFunctions.SendProgress(i, 800, "loading", connectionID);
        }
    }
}

connectionID变量使用jquery通过一个隐藏变量传递,我已经检查了它是否有效。这是我用来检索connectionID的JS

var connectionID = $.connection.hub.id;
ConnectionIdVariable.value = connectionID;

0 个答案:

没有答案