【发布时间】:2017-06-02 13:44:37
【问题描述】:
您好,在我的应用程序中,我使用 SignalR 来存储用户和 signalR 连接映射。我在 OnConnected() 事件上添加连接和用户映射,并在 OnDisconnected() 事件上删除连接。
从应用程序下载文件时会调用 OnDisconnected 事件,这会删除用户连接。下面是文件下载代码
public ActionResult DownloadFile(string fileName)
{
// adding time stamp to file name
fileName = fileName.FileNameWithTimeStamp();
//Fetch file bytes from TempData
byte[] fileContent = (byte[])TempData[Constants.ExportedData];
return File(fileContent, Constants.ExcelContentType, fileName);
}
后续不会调用 OnReconnected 或 OnConnected 事件,这会导致数据丢失(存储在 OnConnectedEvent 上的用户连接映射)。因此系统无法向已删除的用户连接发送通知。
下面是 SignalR 事件的代码
public override Task OnDisconnected(bool stopCalled)
{
string name = Context.User.Identity.Name;
//Remove data to cache
cache.Remove(name.ToLower(),Context.ConnectionId);
return base.OnDisconnected(stopCalled);
}
public override Task OnConnected()
{
string name = Context.User.Identity.Name.ToLower();
if(!string.IsNullOrEmpty(name))
{
cache.Add(name, Context.ConnectionId);
}
return base.OnConnected();
}
有谁知道为什么 onDisconnected 事件在 File download() 上被调用。
【问题讨论】:
标签: asp.net-mvc signalr signalr-hub signalr-2