-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Closed
Description
I'm using SignalR 2.0 on MVC5 application using the new ASP.NET Identity feature.
Context.User.Identity.Name is correctly populated on Task OnConnected but suddenly becomes null after user navigate away/logout.
Code:
public override Task OnDisconnected() {
string userName = Context.User.Identity.Name; //results in null exception
string connectionId = Context.ConnectionId; //not null
return base.OnDisconnected();
}
Exception message:
System.NullReferenceException was unhandled by user code
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=SignalRChat
StackTrace:
at SignalRChat.Hubs.ChatHub.OnDisconnected() in f:\SignalRChat\SignalRChat\Hubs\ChatHub.cs:line 34
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Disconnect(IHub hub)
at Microsoft.AspNet.SignalR.Hubs.HubPipelineModule.<>c__DisplayClass13.<BuildDisconnect>b__11(IHub hub)
at Microsoft.AspNet.SignalR.Hubs.HubPipeline.Disconnect(IHub hub)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.<OnDisconnected>b__21(IHub hub)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.<>c__DisplayClass2a.<ExecuteHubEvent>b__26(IHub instance)
at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ExecuteHubEvent(IRequest request, String connectionId, Func`2 action)
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.OnDisconnected(IRequest request, String connectionId)
at Microsoft.AspNet.SignalR.PersistentConnection.<>c__DisplayClassa.<ProcessRequest>b__9()
at Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod(Func`1 func)
InnerException:
However, such issue does not happen if I use authentication in https://github.com/tugberkugurlu/SignalRSamples/tree/master/ConnectionMappingSample
[HttpPost]
[ActionName("Login")]
public ActionResult PostLogin(LoginModel loginModel) {
if (ModelState.IsValid) {
FormsAuthentication.SetAuthCookie(loginModel.Name, true);
return RedirectToAction("index", "home");
}
return View(loginModel);
}
Platform: Windows 7, VS2013 Express