2014-03-04 40 views
0

我在SignalR枢纽代码:如何在SignalR中传递参数到集线器?

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> 

在ASPX页面,我的EmpID是在会话对象,我需要在SignalR以某种方式使用它枢纽。

+0

'EmpId'从哪里来? – devshorts

+0

这就是我需要通过的,但我很无聊,在哪里以及在哪里做到这一点。 – WinFXGuy

+0

我不确定我关注。这个属性意味着什么,即使你知道如何通过它,你也可以在哪里访问它?它可以从其他地方暴露吗?您无法在构造函数中传递任何内容,因为您不负责创建Hub。任何你想让集线器拥有它的东西都需要知道,或者从其他地方拉出来。 – devshorts

回答

3

您可以通过连接(例如check herehere和示例)跟踪连接的用户(以及任何关联的元数据),并根据您的计时器打勾检查您存储的本地数据以获取所需的任何内容。

本身signalR不会传递给你任何东西。客户必须传递信息。

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

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

+1

谢谢,我会看看并尝试实施它。 – WinFXGuy

+1

我是否会在客户端连接上发送EmpId?这是我如何连接到客户端的集线器。 var alert = $ .connection.alertHub;请让我知道如何在客户端连接时添加一个hndler。 – WinFXGuy

+1

http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-javascript-client#querystring – halter73