Я использую сигнализатор 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, похоже, решает эту проблему.