Comment passer un paramètre à un concentrateur dans SignalR?
Mon code dans 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();
}
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);
}
}
En quelque sorte, j'ai besoin de passer EmpId paramètre. Comment faire cela?
Certains plus d'informations sur le client:
Sur ma page aspx, j'ai le code suivant:
<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>
Sur la page ASPX, mon EmpID est dans l'objet session et j'ai besoin de quelque sorte de l'utiliser dans la SignalR hub.
- D'où vient
EmpId
viennent? - C'est ce que j'ai besoin de passer, mais je suis cluless comment et où le faire.
- Je ne suis pas sûr de suivre. Que veut bien dire, et où voulez-vous avoir accès à elle, même si vous saviez comment faire pour passer? Peut-il être exposés à partir de quelque part d'autre? Vous n'allez pas être en mesure de passer à quoi que ce soit dans le constructeur, car vous n'êtes pas responsable de la création du Hub. Tout ce que vous voulez le hub avoir il soit besoin de les connaître déjà, ou de tirer à partir de quelque part d'autre.
- J'ai mis à jour ma réponse pour vous
Vous devez vous connecter pour publier un commentaire.
Vous pouvez garder une trace des utilisateurs connectés (et toutes les métadonnées associées) par connexion (vérifiez ici et ici pour des exemples) et sur votre timer tick vérifier votre stockées les données locales pour tout ce dont vous avez besoin.
Par lui-même, signalR de ne pas vous laisser passer quoi que ce soit. Le client doit passer bien des choses.
Si votre client a l'ID de l'employé, il faut les envoyer à l'signalr hub sur connecter. Vous pouvez ajouter un gestionnaire de savoir quand le client se connecte à votre page aspx javascript, et puis de l'envoyer vers le hub. Le hub peut alors garder une trace de
ConnectionId, EmployeeID
dans un dictionnaire et vous pouvez l'utiliser pour accéder à l'arrière sur le client particulier ou faire ce que vous voulez.De vérifier les liens que j'ai posté, ils montrent comment faire.
start()
méthode qui vous permettra d'invoquer un rappel. À ce point il suffit d'envoyer tout ce que vous voulez pour le hub.$.connection.hub.start()
sur un id de connexion?En plus de la accepté de répondre, j'ai utilisé cette pour passer plusieurs chaînes de requête du client vers le hub:
Client:
---Reste du code--------
En classe Hub:
Je suis l'aide de la “de Microsoft.AspNet.SignalR.Client” bibliothèque de la version “2.3.0.0” dans une application windows form à l'aide de c#.