仅限进度更新消息打开选项卡(唯一的Connectionid)| SignalR

时间:2016-11-02 15:40:25

标签: c# jquery signalr

我一直在研究如何找到SignalR实现的工作示例,其中状态更新仅 发送到浏览器选项卡的实例。我的应用程序提取Web数据,该过程需要花费大量时间。

我能够发送状态更新,但仅限于打开网页的所有用户。

//Server side (works just fine)
public class SendCustomText : Hub
{
    public string myStatus;
    public void CurrentStatus()
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<SendCustomText>();
        context.Clients.All.setStatus(myStatus);
    }
}

//Client side
<script type="text/javascript">
$(function () {
    //Declare a proxy to the reference hub
    var currentStatus = $.connection.sendCustomText;
    currentStatus.client.setStatus = function (value) {
        $('#signalr_french_status').text(value.toString());
    }
    $.connection.hub.start().done(function () {
        $('pandora_french_panel_extract_button').click(function () {
            currentStatus.server.send();
        })
    })
    $.connection.hub.disconnected(function () {
        $.connection.hub.start();
    })
})

然而,我需要的是一种仅在打开的选项卡中更新进度的方法。登录用户可以打开另一个选项卡并处理另一个作业,新选项卡应显示自己的进度。

我尝试成功获取连接ID客户端,然后通过AJAX将其传递给服务器代码。我需要你的帮助,在集线器中使用连接ID。

context.Clients.Client(connectionID).setStatus();

1 个答案:

答案 0 :(得分:0)

我可以自己解决问题。 (我最初做了一个非常基本的错误。第一次,我使用public string myConnectionID,即没有static关键字。)

public class SendCustomText : Hub
{
    public string myStatus;
    public static string myConnectionID;

    public void CurrentStatus()
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<SendCustomText>();
        context.Clients.Client(myConnectionID).setStatus(myStatus);
    }
    public override System.Threading.Tasks.Task OnConnected()
    {
        myConnectionID = Context.ConnectionId;
        return base.OnConnected();
    }
}