Это одностраничное приложение с угловыми js и web api. Я реализовал signalr на странице, которая вызывает метод server.CheckIfRunning(), который проверяет, выполняется ли фоновый процесс и отсылает сообщение клиенту. Когда я впервые заходил на эту страницу, я получаю уведомление успешно. Но когда я перехожу на другую страницу и снова возвращаюсь, страница вызывает сервер.CheckIfProcessRunning() правильно, сервер также нажимает на клиента. Но клиент не получает уведомление.Signalr 2 push не удается использовать одностраничное приложение
Client код сторона:
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);
});
сервера код сторона:
public 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);
}
}
}
FYI, на стороне клиента код выполняется всякий раз, когда я иду на эту страницу. Может кто-нибудь, пожалуйста, дайте мне знать, что я сделал неправильно?
Вы можете переопределить OnConnecred и OnDisconnected события на сервере и клиенте, чтобы увидеть, что клиент не будет отключен неправильно? Кстати, вы можете включить 'EnableDetailedErrors', чтобы увидеть, есть ли исключения на стороне клиента. – cassandrad
Спасибо, cassandrad. Я попытался подключиться и отключил метосы на сервере, и они, похоже, работают нормально. Он подключается. Когда я перехожу к другому виду, он не отключается. Но подключается снова, когда я возвращаюсь к этому представлению. Это вызывает проблемы? Должен ли я отключить ehile, оставляя представление? Я попытаюсь внедрить события на стороне клиента и включит enableetailerrors, чтобы увидеть, могу ли я что-то найти. –