Я пытаюсь вернуть счет всех подключений к веб-клиенту с помощью SignalR. Я увеличиваю и сохраняю счет клиента с помощью логики запуска на концентраторе OnConnected()
.Возврат количества подключенных клиентов в SignalR. Не запускать функцию клиента
public class PopHub : Hub
{
public static List<string> Users = new List<string>();
public override Task OnConnected()
{
var clientId = GetClientId();
if (Users.IndexOf(clientId) == -1)
{
Users.Add(clientId);
}
Send(Users.Count);
return base.OnConnected();
}
public void Send(int count)
{
Clients.All.updateUsersOnlineCount(count);
}
пошаговый мой код с внешним клиентом консоли (для запуска OnConnected()
) показывает, что я обход через Send(int count)
с отсчетом 1.
На моем вебе-клиенте, настроить мой JS как таковой
$(function() {
var hub = $.connection.popHub;
hub.client.updateUsersOnlineCount = function(count) {
console.log(count);
};
$.connection.hub.start().done(function() {
console.log('connected');
});
}());
И, наконец, мой отрывок из сгенерированного JS
proxies.popHub = this.createHubProxy('popHub');
proxies.popHub.client = { };
proxies.popHub.server = {
popClient: function (message) {
return proxies.popHub.invoke.apply(proxies.popHub, $.merge(["PopClient"], $.makeArray(arguments)));
},
query: function() {
return proxies.popHub.invoke.apply(proxies.popHub, $.merge(["Query"], $.makeArray(arguments)));
},
send: function (count) {
return proxies.popHub.invoke.apply(proxies.popHub, $.merge(["Send"], $.makeArray(arguments)));
}
};
** Обратите внимание, что Popclient
и Query
являются событиями, не связанными с сервером, из которых действительно работают, давая мне некоторую проверку. Любая идея, почему мои клиенты updateUsersOnlineCount
функция не регистрирует количество подключений, как я ожидаю?
Это, вероятно, не то, что вызывает 'updateUsersOnlineCount' не войти, но вы не должны модифицировать статический список внутри OnConnected. Коллекции, найденные в пространстве имен System.Collections.Generic, не являются потокобезопасными. Вместо этого используйте коллекцию из пространства имен System.Collections.Concurrent, например [ConcurrentBag ] (http://msdn.microsoft.com/en-us/library/dd381779.aspx). –
halter73