Я использую SignalR для передачи сообщений с сервера ASP.NET MVC на веб-клиентов.HttpSessionState не доступен во время события SignalR.PersistentConnection.OnConnected
Я хочу сохранить идентификатор соединения текущего клиента, когда новое соединение с клиентом принято, так что, когда я хочу отправить данные этому конкретному клиенту, я могу получить его идентификатор соединения из сеанса и отправить это сообщение.
Однако в обработчике событий OnConnected сеанс равен NULL. В результате мой код генерирует исключение ссылочной ссылки, когда я пытаюсь поместить connectionId в сеанс.
Код фрагмента кода.
using Microsoft.AspNet.SignalR;
namespace TestSignalR
{
public class SignalRServerListener : PersistentConnection
{
protected override System.Threading.Tasks.Task OnConnected(
IRequest request,
string connectionId)
{
System.Diagnostics.Debugger.Break();
System.Diagnostics.Debug.
Print("Connection request received and accepted from
client with connection Id {0}", connectionId);
HttpContext.Current.Session["connectionId"] = connectionId;
return base.OnConnected(request, connectionId);
}
}
}
спасибо. Ваш ответ и эта статья, которую я читал, ожидая ответа (http://www.syfuhs.net/post/2013/03/24/Real-time-User-Notification-and-Session-Management-with-SignalR -Part-2.aspx), похоже, говорят о том, что мы должны отслеживать сами идентификаторы соединения. Но если это список приложений (поскольку он является статическим), как я могу быть уверенным, что определенный идентификатор соединения принадлежит текущему HttpRequest/клиенту? –
Текущий запрос обязательно будет снят в переопределении «OnConnected», и такое же соединение снова будет снято при отключении. – wwcdwdcw
Я думаю, что мы не можем понять друг друга очень хорошо. Предположим, что у меня есть 3 клиента, подключенных к серверу. В этом случае ваш список будет иметь 3 идентификатора соединения. Теперь, когда сервер хочет отправить данные одному из этих клиентов, как сервер должен знать, какой идентификатор соединения должен использоваться в Context.Connection.Send ('connectionId', message)? –