これは、角度jsおよびWeb APIを持つ単一ページアプリケーションです。バックグラウンドプロセスが実行されているかどうかをチェックし、クライアントにメッセージをプッシュするメソッドserver.CheckIfRunning()を呼び出すページで、signalrを実装しました。最初にそのページに行くと、通知が正常に取得されます。しかし、別のページに移動してもう一度やり直すと、ページはserver.CheckIfProcessRunning()を正しく呼び出すため、サーバーはクライアントにもプッシュします。ただし、クライアントは通知を受け取りません。Signalr 2プッシュが単一ページアプリケーションに失敗する
クライアント側コード:
var hub = $.connection.tRAHub;
hub.client.NotifyAlreadyRunning = function (message) {
$scope.$apply(function() {
$scope.status=message;
});
};
$.connection.hub.start()
.done(function() {
hub.server.checkIfRunning($.connection.hub.id);
});
サーバー側のコード:
FYIpublic class TRAHub : Hub
{
public void CheckIfRunning(string id)
{
var isRunning = CheckIfProcessRunning();//this method checks if the process is running. code not shown
if (isRunning)
{
var client = Clients.Client(id);
client.NotifyAlreadyRunning(id);
}
}
}
私はそのページに移動するたびに、クライアント側のコードが実行されます。 誰でも私が間違ったことを教えてもらえますか?あなたは
Clients.Caller.NotifyAlreadyRunning(id);
を使用しようとすることができ
あなたはOnConnecredをオーバーライドし、そのクライアントが誤って切断されていない見て、サーバ側とクライアント側のイベントをOnDisconnectedすることはできますか?ところで、 'EnableDetailedErrors'を有効にして、クライアント側に例外があるかどうかを調べることができます。 – cassandrad
おかげでcassandrad。私はonconnectedとサーバー上の接続されていないmethosを試してみて、うまく動作するようです。接続します。別のビューにナビゲートすると、それは解消されません。しかし、私がこの見解に戻ったときに再び接続します。これは問題を引き起こしていますか?私はビューを離れるときに切断する必要がありますか?私はクライアント側でイベントを暗示しようとすると、私は何かを見つけることができるかどうかをenabledetailederrorsが見ることができます。 –