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();
}