C# 如何将参数传递给信号机中的集线器?

C# 如何将参数传递给信号机中的集线器?,c#,signalr,signalr-hub,C#,Signalr,Signalr Hub,信号集线器中的我的代码: public class AlertHub : Hub { public static readonly System.Timers.Timer _Timer = new System.Timers.Timer(); static AlertHub() { _Timer.Interval = 60000; _Timer.Elapsed += TimerElapsed; _Timer.Start()

信号集线器中的我的代码:

public class AlertHub : Hub
{
    public static readonly System.Timers.Timer _Timer = new System.Timers.Timer();

    static AlertHub()
    {
        _Timer.Interval = 60000;
        _Timer.Elapsed += TimerElapsed;
        _Timer.Start();
    }

    static void TimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        //Random rnd = new Random();
        //int i = rnd.Next(0,2);
        Alert alert = new Alert();
        i = alert.CheckForNewAlerts(EmpId);

        var hub = GlobalHost.ConnectionManager.GetHubContext("AlertHub");

        hub.Clients.All.Alert(i);
    }
}
不知何故,我需要传递EmpId参数。如何做到这一点

更多客户详细信息: 在我的aspx页面上,我有以下代码:

<script type="text/javascript">

    $(function () {
        var alert = $.connection.alertHub;
        alert.client.Alert = function (msg) {
            if (msg == 1) {
                $("#HyperLink1").show();
                $("#HyperLink2").hide();

            }
            else {
                $("#HyperLink1").hide();
                $("#HyperLink2").show();
            }
            //$("#logUl").append("<li>" + msg + "</li>");
        };
        $.connection.hub.start();
    });

</script>

$(函数(){
var-alert=$.connection.alertHub;
alert.client.alert=函数(msg){
如果(msg==1){
$(“#HyperLink1”).show();
$(“#HyperLink2”).hide();
}
否则{
$(“#HyperLink1”).hide();
$(“#HyperLink2”).show();
}
//$(“#logUl”)。追加(“
  • ”+msg+”
  • ”); }; $.connection.hub.start(); });

    在ASPX页面上,我的EmpID在session对象中,我需要在signarhub中使用它

    您可以通过连接(例如)跟踪已连接的用户(以及任何相关的元数据),并在计时器上勾选您存储的本地数据以获取所需信息

    信号员本身不会传给你任何东西。客户必须把东西传下去

    如果您的客户具有员工ID,请将其发送到connect上的signalr hub。您可以在aspx页面javascript中添加一个处理程序,知道客户端何时连接,然后将其发送到集线器。然后,中心可以在字典中跟踪
    ConnectionId、EmployeeID
    ,您可以使用它访问特定的客户机,或者执行任何您想要的操作


    检查我发布的链接,它们显示了如何做到这一点。

    除了接受的答案之外,我还使用它将多个查询字符串从客户端传递到中心: 在客户端:

    Dictionary<string, string> queryString = new Dictionary<string, string>();
            queryString.Add("key1", "value1");
            queryString.Add("key2", "value2");
            hubConnection = new HubConnection("http://localhost:49493/signalr/hubs", queryString);
    

    我正在使用c#在windows窗体应用程序中使用“2.3.0.0”版本的“Microsoft.AspNet.signar.Client”库。

    EmpId从何而来?这是我需要通过的,但我不知道如何以及在何处执行。我不确定我是否遵循。这是什么意思?即使你知道如何传递,你在哪里可以访问它?它能从别的地方暴露出来吗?您将无法在构造函数中传递任何内容,因为您不负责创建中心。你想让hub拥有的任何东西都需要已经知道,或者从其他地方获取。我为你更新了我的答案。我如何在client connect上发送案例中的EmpId?这就是我连接到客户端集线器的方式。var-alert=$.connection.alertHub;请告诉我如何在客户端连接时添加hndler。@WinFXGuy,@halter73的链接显示如何在调用回调的
    start()
    方法上注册函数。到时候只要把你想要的东西送到中心就行了。谢谢大家。我的另一个问题解决了这个问题@devshorts如果我按照您的建议在字典中保留与用户关联的连接id,那么如果用户刷新页面,我如何重新打开该连接。是否有方法对特定连接id调用
    $.connection.hub.start()
    public override Task OnConnected()
    {
     var value1 = Convert.ToString(Context.QueryString["key1"]);
     var value2 = Convert.ToString(Context.QueryString["key2"]);
     return base.OnConnected();
    }