0

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

4

2 に答える 2

0

target="_blank"を追加することで、これを一時的に「解決」しました。

<a href="@Url.Action("DownloadFile", "Controller")" target="_blank"></a>

しかし、私たちはまだより良い解決策を探しているので、target="_blank" を使用する必要はありません。したがって、他のソリューションは大歓迎です。

于 2017-09-28T09:06:25.637 に答える