こんにちは、私のアプリケーションでは、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();
}
File download() でonDisconnectedイベントが呼び出される理由を知っている人はいますか。