лучше таймер в asp.net? - PullRequest
       17

лучше таймер в asp.net?

0 голосов
/ 26 августа 2009

Я использовал System.Timers.timer в global.as в asp.net, чтобы установить таймер для планирования выполнения функция скажем, TransferMoney (). Но кажется, что этот таймер может остановиться через несколько часов неожиданно. И это потому, что все действия ожидают решения. Я хочу знать, есть ли какие-либо лучшие методы для установки таймера в asp.net, MVC 1.0? Заранее спасибо!

Ответы [ 5 ]

4 голосов
/ 26 августа 2009

Это может быть только потому, что приложение было переработано. Global.ashx не совсем подходящее место для выполнения длительных задач, потому что, если ваш домен приложений будет переработан, ваш таймер умрет. Вместо этого я предлагаю сделать сервис windows для работы.

Редактировать: Что ж, довольно легко создать проект службы Windows в Visual Studio, просто сделайте [Файл]> [Добавить]> [Новый проект ...]> [Windows]> [Служба Windows ] и вы получите код заглушки для проекта.

Трудно привести полный пример, поэтому я предлагаю вам google it . ;) Есть множество образцов, на которые вы можете посмотреть.

Эта статья о CodeProject кажется хорошим введением в службы Windows.

2 голосов
/ 26 августа 2009

Любой таймер, который вы будете использовать в приложениях ASP.NET, в конечном итоге «прекратит», но это очень ожидаемое поведение из-за повторного использования процесса .

1 голос
/ 26 августа 2009

Вы не можете надежно запустить таймер в ASP.NET. Если нет поступающих запросов, IIS может закрыть приложение, и оно не запустится, пока не поступит следующий запрос.

Почему вы думаете, что вам нужен таймер? В большинстве веб-приложений это вообще не нужно для периодических обновлений, если они не зависят от внешнего источника.

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

Если ваши транзакции основаны на внешнем источнике, так что они действительно должны выполняться в определенное время, вы просто не сможете сделать это только с ASP.NET. Вам необходимо приложение, работающее вне IIS, например, периодически запускаемое планировщиком Windows.

1 голос
/ 26 августа 2009

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

Вы можете проверить, доступен ли объект таймера или нет, если он недоступен, создайте его !!, использование любого другого объекта таймера не будет работать. Но это все еще имеет проблему, потому что если у вас нет веб-запроса в течение определенного периода времени, он все равно будет уничтожен. Лучше всего настроить монитор ping из другого места, который может поддерживать ваш сайт в живых.

0 голосов
/ 26 августа 2009

Вы можете попробовать system.threading.timer

http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...