2015-12-03 7 views
0

У меня есть приложение ASP.NET (4.5+), которое вызывает асинхронную задачу из Page_Load, чтобы получить данные для страницы. Я хочу обновлять эти данные каждые 15 минут без ввода пользователем.Формирование ASP.NET page_load

Сначала я попытался использовать таймер и вызвать функцию Page.ExecuteRegisteredAsyncTasks() в функции таймера. Нет ошибки, но моя задача async никогда не вызвана. Только во время Page_Load.

Затем я пробовал различные методы для принудительной перезагрузки страницы, которая заставила бы Page_Load получить вызов снова, но каждая попытка привела к тому, что было исключено исключение, говоря, что в то время этот метод не мог быть использован.

Метод C#, который я хочу вызывать каждые 15 минут, определяется как частная задача async.

Каков наилучший способ вызова этого метода каждые 15 минут? Как я писал выше, он получает вызов из страницы PageLoad, но никогда больше.

+0

Связанные Вопрос: [ Как реализовать данные в реальном времени для веб-страницы] (http://stackoverflow.com/questions/25829343/how-to-implement-real-time-data-for-a-web-page) – mason

ответ

0

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

Одна из альтернатив заключается в создании службы, для этого вы можете использовать сервис ASMX и извлекать данные с клиентской стороны. Используя HTML5 Local Storage, чтобы отслеживать время последнего обновления, или даже «nextTimeToUpdate», сохраняйте 15 минут. Установите время из каждой минуты, чтобы проверить текущее время DateTime, и if> = nextTimeToUpdate, затем запускает запрос через AJAX.

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

Редактировать

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

У Скотта Гензельмана есть статья о How to run Background tasks in ASP.NET. Замечательная библиотека Hangfire

+0

Ой, забыл ссылку к статье Гензельмана. Добавлен. –

0

Вы должны использовать Таймер, это лучший способ, я думаю.

Просто выполняйте следующие шаги:

в области дизайна страницы:

<asp:ScriptManager ID="manager" runat="server" /> 
<asp:Timer ID="timer" runat="server" Interval="900000" OnTick="timer_Tick" /> 

Затем создают некоторую функцию (например, MyFunc()), и ваш код позади:

protected void Page_Load(object sender, EventArgs e){ 
    MyFunc(); 
} 
protected void timer_Tick(object sender, EventArgs e){ 
    MyFunc(); 
} 
protected void MyFunc(){ 
    //do all actions, what you need, here 
} 
Смежные вопросы