2014-03-04 39 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