Получать данные с сервера без увеличения времени ожидания сеанса - PullRequest
8 голосов
/ 13 января 2011

Существуют ли в ASP.net способы извлечения данных с сервера без увеличения времени ожидания сеанса? Это нужно делать каждые несколько минут без участия пользователя, пока страница не закроется.

Дополнительный контекст по запросу:

Страницы в моем веб-приложении должны опрашивать сервер каждые несколько минут, чтобы проверить наличие определенного состояния (в данном случае аварийное обслуживание запланировано на 30 минут). Когда условие выполнено, на странице отобразится сообщение для пользователя. Когда условие ложно, ничего не должно происходить.

Насколько я понимаю, обратные передачи на сервер сбрасывают время до истечения сеанса. Мы не хотим, чтобы сеанс расширялся / обновлялся / сбрасывался / каким бы ни было слово каждый раз, когда страница опрашивает сервер. Мне нужен способ автоматического опроса сервера без сброса времени ожидания сеанса.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 13 января 2011

Если вы запрашиваете в контексте длинного HTTP-запроса и хотите предотвратить тайм-аут HTTP, посмотрите на <httpRuntime executionTimeout="99999"></httpRuntime> файла web.config, где, как мне кажется, значение executeTimeout составляет http://msdn.microsoft.com/en-us/library/e1f13641(v=vs.71).aspx.

Если это действительно просто проблема тайм-аута сеанса, возможно ли асинхронно пропинговать сервер во время одного и того же сеанса пользователя, пока выполняется длинный процесс?

Редактировать : Исходя из ваших правок, если вы разделите веб-службу «Обслуживание веб-сайта» на службу, выходящую за пределы области состояния сеанса обычной части сайта, вы сможете вызывать ее так часто, как захотите. Например, если вы используете веб-сервис ASMX на своем текущем веб-сайте в настоящее время, просто разделите его на отдельное приложение, возможно, в качестве каталога вне вашего приложения, чтобы оно попадало в один домен. Я думаю, что это будет работать нормально.

Я не уверен, какой тип веб-службы вы вызываете в это время (ASMX, WCF и т. Д.), Или даже если веб-служба, которую вы вызываете в это время, находится в том же приложении, что и ваш ASPX страницы приложения.

1 голос
/ 13 января 2011

Во-первых, если запрос выполняется с превышением лимита времени сеанса, возникает серьезная проблема с запросом.Я бы предпочел исправить запрос первым.Однако, если вы все еще хотите сделать это с помощью сеанса, попробуйте следующее:

В вашем приложении может быть Dummy.aspx, а затем элемент изображения обновляет свой URL каждые 15 минут, например:

<img id="dummyImage" src="/Dummy.aspx" width=0 height=0/>

<script type="text/javascript">
    var dummyImage = document.getElementById("dummyImage");
    setInterval(function(){
        dummyImage.src = "Dummy.aspx?_tmp=" + (Math.random() * 100000);
    }, 900000);
</script>

Таким образом, вы не будете влиять на время ожидания сеанса на глобальном уровне.

0 голосов
/ 13 января 2011

Используйте таймер JavaScript, который запускает вызов AJAX. Таким образом, в вашем PageLoad событии выявляется функция javascript setInterval(functiontocall(), timetowait);. Метод, который вы вызываете, будет попаданием AJAX в веб-службу, выполняющую ваш запрос.

Это будет вызывать себя, пока пользователь не закроет страницу.

Сессии не обновляются после попаданий AJAX.

...