我是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;