Инициируйте серию SMS-оповещений с течением времени с помощью Twilio/ASP.NET.

Я не видел такой ситуации, как у меня, так что вот:

Основные моменты сценария: пользователю нужна система, включающая настраиваемые SMS-оповещения. Компонент функциональности должен иметь способ идентифицировать запуск на основе пользовательского ввода, а затем отправлять SMS с персонализированным сообщением в соответствии с предварительно определенным интервалом после запуска. Я никогда раньше не использовал Twilio и занимаюсь реализацией.

Решение первого прохода. Используя учетную запись Twilio, я назначил файл .aspx, который будет получать входящие триггерные оповещения/SMS через GET. Принимающая страница объявляет и создает экземпляр моего объекта SMSAlerter при загрузке страницы, который немедленно отвечает первым SMS и запускает System.Timer.Timer. Элементарно и функционально до точки.

Проблема: Предупреждения продолжают отправляться, если интервал для таймера является коротким промежутком времени. Я проверил это с минутным интервалом и был успешным. Когда я зашел на 10 минут, сразу же отправляется смс и через 10 минут отправляется первое сообщение, но ничего после этого.

Мое наблюдение: поскольку взаимодействие с ресурсом после входящего текста отсутствует, время ожидания сеанса истекает, если оставить значение по умолчанию 20 минут. Увеличение тайм-аута сеанса не работает, и даже если бы оно и работало, это не кажется правильным, поскольку интервал будет порядка часов, а не минут.

Использование кеша для хранения каждого нового SMSAlerter может быть правильным решением. Для любого создаваемого SMSAlerter расписание используется примерно 12 часов и заменяется новым объектом SMSAlerter, когда тот же пользователь уведомляет систему на следующий день. Есть ли способ лучше? Я слишком/недостаточно упрощаю? Сейчас я не ожидаю интенсивного трафика (десятки пользователей), но пользователь мыслит масштабно.

Спасибо за комментарии, предложения. Я не включал код, потому что вопрос касается дизайна, а не синтаксиса.


person TLS    schedule 27.03.2013    source источник


Ответы (1)


Я думаю, что ваш таймер выходит за рамки примерно через 20 минут после исходного запроса, убивая таймер. У меня такое ощущение, что если вы продолжите обновлять страницу aspx, этого не произойдет, но, очевидно, это мало поможет.

Вы можете запустить новый поток с объектом System.Timers.Timer, чтобы он оставался активным и не выходил за пределы области действия при отсутствии последующих запросов к серверу. Но это не очень хорошая идея, если честно, хотя это может помочь в понимании проблемы.

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

Надеюсь это поможет!

(Немного отредактировано, чтобы сделать аспект службы Windows более понятным)

person xmjw    schedule 27.03.2013
comment
Спасибо! Я был настолько сосредоточен на проблеме сеанса, что не дошел до того, что произойдет, если приложение прервет обслуживание/перезапуск. Будет исследовать и обновлять. - person TLS; 28.03.2013