SignalR从客户端发送数据

时间:2018-09-26 09:41:56

标签: c# asp.net-mvc signalr

我想使用SignalR将数据从服务器端发送到客户端。 我这里有一个Task遍历这份工作。此作业从SignalR继承了Hub类,在此它发送迭代的当前进度。但是,它不会返回我从服务器端发送的数据。

public async Task loop()
{
    ProgressHub p = new ProgressHub();

    for(var i = 0; i < 100; i++){
        await p.SendProgress(i, 100);
    }
}

public async Task SendProgress(int currentRow, int rowCount)
{
   string message = "Initializing and Preparing...";
   int percent = (currentRow * 100) / rowCount;


    var hubContext = GlobalHost.ConnectionManager.GetHubContext<ProgressHub>();
    var percentage = (currentRow * 100) / rowCount;

    hubContext.Clients.All.AddProgress(message, percent + "%");

    await Task.Delay(100);
}

在Controller上调用循环方法。

public async Task<JsonResult> CallSignalR()
{
    await loop();

    return Json("", JsonRequestBehavior.AllowGet);
}

在JS上调用SignalR

var progressNotifier = $.connection.progressHub;

console.log(progressNotifier);

progressNotifier.client.addProgress = function (currentRow, rowCount) {

console.log(currentRow);
};

$.connection.hub.start();

1 个答案:

答案 0 :(得分:1)

尝试以其他方式定义和分配功能。例如如下:

var progressNotifier = $.connection.progressHub;
console.log(progressNotifier);

progressNotifier.client.addProgress = onAddProgress;

function onAddProgress(currentRow, rowCount) {
    console.log(currentRow);
};

$.connection.hub.start();

我还建议您对此类函数使用单个参数,过去我在使用多个参数时遇到了一些问题。您可以传递一条Json消息,然后稍后对其进行反序列化。