Я использую OnConnected и OnDisconected, чтобы сохранить ловушку пользователей и сократить объем памяти.
Моя проблема в том, что я не могу назначать какие-либо переменные в SignalR. Я использую следующий код.
Когда я читаю Clients.Caller.userid, он всегда равен нулю. Однако я могу прочитать это сразу после того, как я присвою ему переменную xxSameProcess, не равную null.
Есть что-то, что мне не хватает?
public override System.Threading.Tasks.Task OnConnected()
{
var user = CreateUser();
Clients.Caller.userid = user.UserId;
object xxSameProcess = Clients.Caller.userid;
return base.OnConnected();
}
public override System.Threading.Tasks.Task OnDisconnected()
{
object xx = Clients.Caller.userid;
CreateDelete( Clients.Caller.userid );
return base.OnConnected();
}
На моей стороне я храню свою переменную от клиента, когда она подключается
<script src="~/signalr/hubs"></script>
<script type="text/javascript">
(function ($) {
//some stuff
$.connection.hub.qs = { 'uid': '@guid' };
$.connection.hub.start();
})(jQuery);
</script>
Я могу получить к нему доступ с сервера с помощью строк запроса
public override Task OnConnected()
{
var uid = Context.QueryString["uid"];
//some stuff
return base.OnConnected();
}
public override Task OnDisconnected()
{
var uid = Context.QueryString["uid"];
//some stuff
return base.OnDisconnected();
}
public override Task OnReconnected()
{
var uid = Context.QueryString["uid"];
//some stuff
return base.OnReconnected();
}