Чтобы преодолеть (кажущееся) 4-минутное время ожидания простоя на балансировщике нагрузки Azure, кажется необходимым отправить некоторые данные по трубопроводу клиенту время от времени, чтобы соединение не считалось незанятым.MVC3 AsyncController - Можем ли мы отправить данные о сердцебиении клиенту?
Наш контроллер настроен как AsyncController, и он запускает несколько разных асинхронных методов для других объектов, все из которых настроены на использование портов ввода-вывода IO. Таким образом, мы немедленно возвращаемся из нашего метода, и когда пакет завершения обрабатывается, IIS перехватывает исходный запрос, чтобы мы могли визуализировать наш вид.
Есть ли способ периодически отправлять несколько байтов по проводам в этом случае? В «классической» ситуации мы могли бы выполнить этот метод, а затем просто развернуться, пока мы ждали, отправляя данные каждые несколько секунд, пока асинхронный метод не будет завершен. Но в этой ситуации поток IIS освобождается, чтобы заниматься другими делами, и мы подключаемся к нему в нашем обратном вызове завершения. Что делать? Это возможно?
Хороший вопрос. Это для сценария сервера с сервером, выполняющего длинные процессы в облаке. Вызывающие могут выполнять только стандартный запрос/ответ, поэтому они должны ждать. –
Не могли ли серверы отправить первоначальный запрос, а затем опрос для прогресса? Если это так, это может быть полезно: http://stackoverflow.com/questions/6184752/set-timeout-for-controller-action/6192680#6192680 – knightpfhor
@knightpfhor Спасибо, что ответили. Нет, как я упоминал в своем комментарии, эти серверы способны только на базовый запрос/ответ. Они не могут опросить, иначе я бы сразу ответил и давал им опрос на результат, или я бы принял URL-адрес обратного вызова, который я бы позже вызвал с ответом. –