SignalR返回到一个客户端,由控制器

时间:2016-05-06 18:39:14

标签: javascript c# asp.net-mvc-5 signalr

背景

Following along this question,我在试图"告诉"首先打电话的用户,没有其他人。

作为寻找快速和肮脏解决方案的发现阶段的一部分,我被告知SignalR将是一个很好的选择,以帮助发现和反馈。但是,有人告诉我,这只是用于测试,而不是用于生产。

后来,管理层改变主意。

所以现在我已经开始关注这个项目,并准备好发布。我把它弄得很快又脏,所以我有一个我不知道如何有效修复的缺陷。我告诉它向所有人广播,但我需要它只向一个客户广播。

当前实施

代码会有很多东西被删除,但它应该给出它的主旨。首先是控制器。

public class HomeController : Controller
{
    HubResponder hub = new HubResponder();
    public String RunProcess(FormCollection ProcessingInfo)
    {
        hub.SignalUser("String");
    }
}

我在这里看到的是,因为我从控制器而不是客户端构建集线器,所以它不接收客户端信息。我也无法将其转换为集线器,因为它已经继承了Controller。这是集线器:

public class HubResponder : Hub
{
    public void SignalUser(String Outbound)
    {
        IHubContext context = GlobalHost.ConnectionManager.GetHubContext<HubResponder>();
        context.Clients.All.sendStatus(Outbound);
    }
}

现在这样可行,但它会发送给所有人,这会让人感到困惑。

1 个答案:

答案 0 :(得分:-1)

好的,这就是我想出的答案。通过使用带有连接ID的隐藏输入,当表单提交时我只分配给该特定位置。

<input id="SignalConnectionID" type="hidden" name="SignalConnectionID" value="" />

其他地方:

$.connection.hub.start()
.done(function () {
$('#SignalConnectionID').val($.connection.hub.id);
});

然后在提交表单时,我给实例化的集线器提供连接ID。基本上就是这样。