SignalR отправляет только первые два сообщения

У меня есть веб-приложение .Net MVC, и я использую SignalR для реализации функции индикатора выполнения. У меня есть представление, которое выполняет Ajax POST для действия с использованием JQuery:
$.ajax({ url: actionUrl, type: 'POST', data: { ids: ids }, success: function (data) { ... } });

Контроллер обрабатывает информацию внутри цикла, и каждая n итерация отправляет сообщение с помощью signalr на концентратор. Клиент подключается к концентратору и обновляет индикатор выполнения с информацией в сообщениях.
Я открываю соединение с концентратором сигналов с помощью этого кода:
var connection = new HubConnection("http://localhost/"); connection.Credentials = CredentialCache.DefaultNetworkCredentials; this.proxy = connection.CreateHubProxy("progressHub"); connection.Start().Wait(); И затем отправляю информацию с помощью этого:
proxy.Invoke("ProgressChanged", taskId, progress);
Это работает правильно для первых двух обновлений, но с этого момента оно больше не работает до конца длительного процесса, когда я получаю все оставшиеся сообщения. Я получаю что-то вроде этого:

0% завершено
5% завершено
... (долгая пауза по мере завершения процесса)
10%, 15%, 20%, 25% и т. д. (все эти сообщения объединяются)

Это всегда первые два сообщения, а не случайное количество сообщений.
Знаете ли вы какую-либо конфигурацию, которую я могу упустить?
Я пытался добавить сон после каждого сообщения, сделать действие асинхронным и добавить .Wait( ) к каждому сообщению, но это всегда одно и то же.
Я попробовал это в IISExpress и полной версии IIS 8.


person Guillermo Vasconcelos    schedule 17.11.2015    source источник


Ответы (1)


Ваш метод действия в контроллере должен быть async и вызвать асинхронную задачу. Я предполагаю, что пока ваш вызов ajax ожидает завершения, вызов, сделанный signalR, вероятно, ставится в очередь до тех пор, пока ваш процесс не завершится и не завершит запрос ajax.

person Nicolas Boisvert    schedule 17.11.2015