我在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 :(得分:3)
您可以通过连接(check here和here作为示例)跟踪已连接的用户(以及任何关联的元数据),并在计时器上勾选您存储的本地数据以查找所需内容。
信号R本身不会传递任何东西。客户必须传递信息。
如果您的客户有员工ID,请将其发送到连接上的信号中心。您可以添加一个处理程序,知道客户端何时连接到您的aspx页面javascript,然后将其发送到集线器。然后,集线器可以在字典中跟踪ConnectionId, EmployeeID
,您可以使用它来访问特定客户端或执行任何操作。
检查我发布的链接,他们会说明如何执行此操作。
答案 1 :(得分:1)
除了接受的答案外,我还使用它来将多个查询字符串从客户端传递到中心: 在客户端中:
import itertools
import bokeh
from bokeh import *
source0 = ColumnDataSource(data={'x' : x1 ,'y=' : y1,})
p1 = p.line(x = 'x',y = 'y',source = source0))
---其余代码--------
在Hub类中:
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.SignalR.Client”库。