Сигнал перестает делать обратные вызовы через несколько минут - PullRequest
6 голосов
/ 16 февраля 2012

Я использую сигнализатор 0.4 на aspx-Page,

var hub = $.connection.FooHub;

hub.disconnected(function () {                
            log("Server has disconnected");
        });

hub.ShowInfo = function (Info) { .... }

$("#Button1").click(function () {
            hub.FooFunction('foo');
        });

$.connection.hub.start();

Концентратор определяется как:

public class FooHub : Hub, IDisconnect
{    
    ~FooHub()
    {
        log.Debug("FooHub Destroy");
    }
    public FooHub()
    {
        log.Debug("FooHub Startup");
    }    
    public bool FooFunction(string stuff)
    {
        log.Debug("Hub FooFunction");
        Clients.ShowInfo(someInfo);
        return true;
    }
    public Task Disconnect()
    {
        // Query the database to find the user by it's client id etc. etc.
        MyController.Disconnect(Context.ConnectionId);
        log.Debug("Hub Disconnnect " + Context.ConnectionId);
        return null;
    }
   ......
}

Когда я открываю страницу и сразу нажимаю на Button1
он вызывает концентратор, который, в свою очередь, вызывает функцию ShowInfo на странице.
С Firebug я вижу, что сигнализатор использует длительный опрос для связи. Так что все работает как положено.

Но когда я подожду пару минут
я вижу, что

  • FooHub уничтожен
  • Отключение вызывается в концентраторе,

однако на странице нет нового соединения
Firebug показывает, что старый все еще выполняется
и когда я затем нажимаю на кнопку -

  • FooFunction вызывается (я вижу новое соединение в firebug)
  • FooHub создан
  • FooFunction выполняется в Hub (в журнале есть строка)
  • , но ShowInfo не выполняется

Это ошибка в SignalR или я должен сделать что-то еще, чтобы получить вызов ShowInfo?

Обновление (Возможный ответ):

Он использовал Forever-Frame, а не длительный опрос.

Кроме того, проблема возникает, в основном, при использовании мобильного интернета (USB-флешки) и Firefox.

Смена транспорта на long-Polling, похоже, решает эту проблему.

Ответы [ 2 ]

1 голос
/ 12 января 2013

Вы упомянули переход к длинному опросу вместо использования кадра навсегда, но не сказали, как это сделать. Вы можете указать, какие транспорты использовать при запуске соединения.

connection.start({ transport: ['longPolling','webSockets'] });

Подробнее см. https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client.

0 голосов
/ 28 июля 2012

Вы смотрели на это https://github.com/SignalR/SignalR/wiki/Configuring-SignalR Попробуйте это увидеть.Для меня, согласно вашему коду, все в порядке.Также вы можете проверить то же самое в Chrome и посмотреть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...