Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Ребят, поделитесь опытом. Как реализовать отправку Email наиболее правильно, реализуя следующий сценарий: 1) Пользователь вносит заявку, заполняя поля формы; 2) Нажимает кнопку Сохранить; 3) Запускается действие контроллера, там заявка сохранятся в базе через репозиторий. 4) .... и теперь надо разослать копии писем всем заинтересованным лицам... Где это надо делать? Там же в методе(action) контроллера? Или в методе создать объект Task, и в параллельном потоке пускай делает рассылку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2014, 20:10 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
RDSГде это надо делать? добавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем. подробней: http://www.quartz-scheduler.net/ http://stackoverflow.com/questions/6647272/how-to-setup-quartz-net-for-scheduling-emails ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 05:40 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttдобавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем.Планировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным. RDS, не усложняй сейчас параллельными потоками, репозиториями и прочей мишурой. Отправляй всё как есть, в контроллере. И очень рекомендую использовать Postmark . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 14:00 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучhVosttдобавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем.Планировщик-то тут зачем? Разовая же акция. Не согласен. Не известна реальная нагрузка на сайт, чтобы утверждать, что это "разовая акция". На сайте могут в течении минуты сотни, тысячи заявок создаваться. У них могут меняться статусы и прочие атрибуты, на это так же нужна реакция. Самый правильный способ - способ, предложенный hVostt. P.S. По теме вопроса UserManager<TUser, TKey>.SendEmailAsync (вот тут в красках http://codearticles.ru/articles/2460) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 14:55 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучПланировщик-то тут зачем? Разовая же акция. Дело не в "разовости" акции, а в том, что время отправки электронной почты не детерменировано (тем более куче адресатам). В задачу веб-сервера входит как можно быстрее обработать запрос и вернуть ответ пользователю. Ещё раз подчеркну, как можно быстрее . Поэтому лучше отдать отправку писем шедулеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:03 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttВ задачу веб-сервера входит как можно быстрее обработать запрос и вернуть ответ пользователю.разве в случае Task это будет не так? Да, будет израсходован один фоновый поток веб-сервера, но зато не надо лишних телодвижений (при небольшой, понятно, нагрузке отправки почты) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 15:06 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Shocker.ProДа, будет израсходован один фоновый поток веб-сервера, но зато не надо лишних телодвижений (при небольшой, понятно, нагрузке отправки почты) Два потока на реквест - это жирно для нагруженных систем. Если тебя устраивает такой подход и кол-во писем в минуту стремится к нулю, делай так. Но я бы не стал применять такой подход. Отдельная песочница для процессинга - это лучшее, что можно предложить. P.S. hVostt, спс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 16:05 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУДва потока на реквест - это жирно для нагруженных систем. Если тебя устраивает такой подход и кол-во писем в минуту стремится к нулю, делай так.Я как раз и спрашивал про низконагруженную (письмами) систему. Ведь как у ТС с этим - мы не знаем. А почему два потока? Первый же освободится (для приема новых реквестов). Второй не будет из пула потоков для обработки реквестов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 16:29 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Shocker.Proразве в случае Task это будет не так? Да, будет израсходован один фоновый поток веб-сервера, но зато не надо лишних телодвижений (при небольшой, понятно, нагрузке отправки почты) а почему сразу не делать по уму, не понимаю? принцип "так ведь работает же и так" не уместен. делать правильно и хорошо надо превращать в крепкую привычку, тогда потом проблем не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 20:16 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Shocker.ProА почему два потока? Первый же освободится (для приема новых реквестов). Второй не будет из пула потоков для обработки реквестов. пожалуйста, прочитай посыл топикастера, процитирую на всякий случай кусочек: авторРебят, поделитесь опытом. Как реализовать отправку Email наиболее правильно зачем ему подкидывать заведомо не хорошие, не качественные решения? я думаю, что как отправить почту в принципе он итак знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 20:18 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttа почему сразу не делать по уму, не понимаю? принцип "так ведь работает же и так" не уместенВ данном случае я подразумеваю другой принцип - не плодить лишних сущностей. То есть для того, чтобы сделать "по уму", нужно будет внести дополнительную зависимость от сторонней библиотеки, уменьшая надежность, понятность, сопровождаемость системы. То есть не всегда чтобы убить муху есть смысл применять РПГ. При этом я оговариваю - при условии ненагруженной (письмами) системы. Спрашиваю не сколько в плане архитектуры, сколько в техническом плане для общего развития, какими это подводными камнями может быть чревато (с теми же потоками) А очереди сообщений я организовывал, я понимаю преимущества централизации обработки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 20:31 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Shocker.ProhVosttа почему сразу не делать по уму, не понимаю? принцип "так ведь работает же и так" не уместенВ данном случае я подразумеваю другой принцип - не плодить лишних сущностей. То есть для того, чтобы сделать "по уму", нужно будет внести дополнительную зависимость от сторонней библиотеки, уменьшая надежность, понятность, сопровождаемость системы. То есть не всегда чтобы убить муху есть смысл применять РПГ. При этом я оговариваю - при условии ненагруженной (письмами) системы. Спрашиваю не сколько в плане архитектуры, сколько в техническом плане для общего развития, какими это подводными камнями может быть чревато (с теми же потоками) А очереди сообщений я организовывал, я понимаю преимущества централизации обработки Просто человек задаётся вопросами как лучше, и как правильно, а не вопросом как отправить почту из контроллера, какой-нибудь одинокий е-мейл, раз в пол года. Речь идёт о поступающих заявках и рассылке, значит дело пахнет жареным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2014, 22:13 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttПоэтому лучше отдать отправку писем шедулеру.Ты ж понимаешь, что планировщик сделан для того, чтобы ему можно было сказать "выполни такое-то действие через 45 минут, а вот другое действие выполняй каждые два часа по будням". Ничего из этого в данном случае не нужно. Нужно уметь отложенно (и то это под большим вопросом) отправлять письма. Отправить и забыть, ничего больше не повторять. Посему, планировщик тут совершенно не в кассу. Можно, конечно, воткнуть какую-нибудь MSMQ (или RabbitMQ, или ZeroMQ, или еще что-нибудь), написать отдельный Windows Service, который будет выполнять всю бэкэндную работу и возгордиться крутой архитектурой, но ТСу этого сейчас не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 07:26 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУНе согласен. Не известна реальная нагрузка на сайт, чтобы утверждать, что это "разовая акция". На сайте могут в течении минуты сотни, тысячи заявок создаваться.Нагрузка будет мизерная, более чем уверен. Не нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем. МСУУ них могут меняться статусы и прочие атрибуты, на это так же нужна реакция.Об этом в исходном сообщении вообще ни слова не было сказано. МСУСамый правильный способ - способ, предложенный hVostt.Дык нет же. Планировщик тут не нужен. МСУP.S. По теме вопроса UserManager<TUser, TKey>.SendEmailAsync (вот тут в красках http://codearticles.ru/articles/2460) Безотносительно текущей задачи -- это прэлэстно, я считаю. Мало того, что отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность, так еще и API традиционно придуман индусами-укурками. Ни заголовков, ни вложений, ни альтернативных представлений, ни кодировок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 07:34 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
RDS4) .... и теперь надо разослать копии писем всем заинтересованным лицам... их много? нужны ли гарантии отправки письма? вариант1 - отправить один раз и пофик на ошибку отправки, вариант2 - отправить, перехватить ошибку, попробовать еще раз через 5 минут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 07:58 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучПланировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным. RDS, не усложняй сейчас параллельными потоками, репозиториями и прочей мишурой. Отправляй всё как есть, в контроллере. И очень рекомендую использовать Postmark . разовая? а ошибки отправки? а ваш Postmark и есть "планировщик"/"очередь", только вне рамок реализуемой системы, определитесь уже - нужен он или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 08:10 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Если нет трудностей - мы их выдумаем софистика наше все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 10:49 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Где-то в степиЕсли нет трудностей - мы их выдумаем софистика наше все кого-то ты мне напоминаешь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 11:20 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучМожно, конечно, воткнуть какую-нибудь MSMQ (или RabbitMQ, или ZeroMQ, или еще что-нибудь), написать отдельный Windows Service, который будет выполнять всю бэкэндную работу и возгордиться крутой архитектурой, но ТСу этого сейчас не надо. Так об этом и речь. Нужна отдельная песочница для процессинга, а что это будет, вин сервис, вин шедулер или кварц - дело десятое. НахлобучНе нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем. НахлобучНагрузка будет мизерная, более чем уверен. Шедеврально. НахлобучМСУУ них могут меняться статусы и прочие атрибуты, на это так же нужна реакция.Об этом в исходном сообщении вообще ни слова не было сказано. Предположить это запрещает религия? В исходных сообщениях, обычно, мало что оговаривается. И если такое понадобится (а такое понадобится) - это отлично ляжет в архитектуру email процессора. НахлобучМСУСамый правильный способ - способ, предложенный hVostt.Дык нет же. Планировщик тут не нужен. Еще как нужен. Банально по каким-то сетевым или иным причинам обвалилась отправка конкретного письма. Всё, жуём траву на лугу? Тебе бы код писать, а не архитектурой заниматься :) НахлобучМСУP.S. По теме вопроса UserManager<TUser, TKey>.SendEmailAsync (вот тут в красках http://codearticles.ru/articles/2460) Безотносительно текущей задачи -- это прэлэстно, я считаю. Мало того, что отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность, так еще и API традиционно придуман индусами-укурками. Что значит "безотносительно текущей задачи"? Безотносительно текущей задачи могу предложить тебе форум кухарок. А относительно текущей задачи, UserManager.SendEmailAsync отличное решение. В API не увидел никакого ужаса, удобный инструмент, раз в 500 удобнее, чем древний унылый мембершип. НахлобучНи заголовков, ни вложений, ни альтернативных представлений, ни кодировок. Присаживайся, двойка. IIdentityMessageService . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 11:35 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУЕще как нужен. Банально по каким-то сетевым или иным причинам обвалилась отправка конкретного письма. Всё, жуём траву на лугу? Тебе бы код писать, а не архитектурой заниматься :)И вот тут планировщик не подходит абсолютно, от слова совсем. Если делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247". На другой стороне ее слушает отправлятель (или пул отправлятелей), который эти уведомления по очереди публикует. В случае ошибки сообщение кладется в отдельную retry-очередь, где они лежат определенное время (и даже здесь планировщик не нужен -- messaging-системы и сами с этим прекрасно справляются) и потом перемещаются обратно в основную очередь. Обработка транзакционности и ситуации с превышением порогового числа повторов отправки и реакции на это событие компонентов системы остается на усмотрение читателя. МСУВ API не увидел никакого ужаса, удобный инструмент, раз в 500 удобнее, чем древний унылый мембершип.Удобный для песочницы, да. Еще раз повторяю: отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность. Ну и: НахлобучНи заголовков, ни вложений, ни альтернативных представлений, ни кодировок. А вот это -- МСУПрисаживайся, двойка. IIdentityMessageService .курам на смех. Покажи-ка мне, по пунктам, как мне с помощью этого уныния: Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне Добавить формируемые извне же вложения Отправить письмо одновременно в HTML и в Plaintext Как извне указать Content-Encoding ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:12 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
17-77а ваш Postmark и есть "планировщик"/"очередь", только вне рамок реализуемой системы, определитесь уже - нужен он или нет Разницу между "планировщиком" и "очередью" понимаешь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:13 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучА вот это -- МСУПрисаживайся, двойка. IIdentityMessageService .курам на смех. Покажи-ка мне, по пунктам, как мне с помощью этого уныния: Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне Добавить формируемые извне же вложения Отправить письмо одновременно в HTML и в Plaintext Как извне указать Content-Encoding Ты из какой берлоги вылез? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. И отправляй тут хоть Аватара в блю-рей... Пипец, ну неужели лень хоть немножечко углубиться в тему, прежде чем яростно бросаться в спор? Дожили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:43 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучИ вот тут планировщик не подходит абсолютно, от слова совсем. Если делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247". На другой стороне ее слушает отправлятель (или пул отправлятелей), который эти уведомления по очереди публикует. В случае ошибки сообщение кладется в отдельную retry-очередь, где они лежат определенное время (и даже здесь планировщик не нужен -- messaging-системы и сами с этим прекрасно справляются) и потом перемещаются обратно в основную очередь. Обработка транзакционности и ситуации с превышением порогового числа повторов отправки и реакции на это событие компонентов системы остается на усмотрение читателя. Выходи из судорга и прекращай нести бред. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:44 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучМСУЕще как нужен. Банально по каким-то сетевым или иным причинам обвалилась отправка конкретного письма. Всё, жуём траву на лугу? Тебе бы код писать, а не архитектурой заниматься :)И вот тут планировщик не подходит абсолютно, от слова совсем. Тут планировщик подходит как нельзя кстати. Абсолютно как нельзя кстати. НахлобучЕсли делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247". Во-первых, очередью может быть обычная таблица в БД. Во-вторых, можно ничего этого не делать, а уведомлять по признаку в БД. Признаком может быть любая логическая конструкция в соответствии с требуемой бизнес логикой. Начиная от смены статусов заявки, кончая какими-то иными типами. И никакие очереди тут даром не нужны. После успешной отправки сообщения выставляется флаг отправленного уведомления. Никакой магии, конструкция проста как мир и надежна, как камень. НахлобучМСУВ API не увидел никакого ужаса, удобный инструмент, раз в 500 удобнее, чем древний унылый мембершип.Удобный для песочницы, да. Еще раз повторяю: отправка писем -- совершенно ортогональная по отношению к Identity Management функциональность. Десятый раз говорю, ASP.NET Identity имеет самое прямое отношение к отсылке сообщений. Почему? Потому что есть встроенный внятный функционал. И если автору всё-таки захочется отправить сообщения прям из сайта по месту, то это самый подходящий вариант сделать это. При условии, что используется ASP.NET Identity, разумеется. Нахлобуч Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне Добавить формируемые извне же вложения Отправить письмо одновременно в HTML и в Plaintext Как извне указать Content-Encoding Легко. 1. IIdentityMessageService.SendAsync => MailMessage.Headers.Add("List-Unsubscribe", "< http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:list-request@host.com?subject=unsubscribe>"; 2. IIdentityMessageService.SendAsync => MailMessage.Attachments 3. IIdentityMessageService.SendAsync => MailMessage.AlternateViews 4. IIdentityMessageService.SendAsync => MailMessage.BodyEncoding ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:56 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttИ отправляй тут хоть Аватара в блю-рей... Пипец, ну неужели лень хоть немножечко углубиться в тему, прежде чем яростно бросаться в спор? Дожили. А теперь по делу. Покажи, как отправить письмо с произвольным вложением. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:58 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttНахлобучИ вот тут планировщик не подходит абсолютно, от слова совсем. Если делать надежную систему отправки уведомлений, то, очевидно, должна быть БД отправляемых уведомлений и очередь, в которую с засовывают сообщения (от слова Message из Message Queue) типа "отправь уведомление #113247". На другой стороне ее слушает отправлятель (или пул отправлятелей), который эти уведомления по очереди публикует. В случае ошибки сообщение кладется в отдельную retry-очередь, где они лежат определенное время (и даже здесь планировщик не нужен -- messaging-системы и сами с этим прекрасно справляются) и потом перемещаются обратно в основную очередь. Обработка транзакционности и ситуации с превышением порогового числа повторов отправки и реакции на это событие компонентов системы остается на усмотрение читателя. Выходи из судорга и прекращай нести бред. А в чём бред-то заключается? У нас около 12 миллионов писем в месяц примерно по такой схеме отправляются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:59 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttВыходи из судорга и прекращай нести бред. Конкретнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 12:59 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
skyANAhVosttпропущено... Выходи из судорга и прекращай нести бред. А в чём бред-то заключается? У нас около 12 миллионов писем в месяц примерно по такой схеме отправляются. Бред заключается вот в этом "И вот тут планировщик не подходит абсолютно, от слова совсем." Как организовывать рассылку, очередью или признаком - не суть дело. Оба варианта имеют право на жизнь. И планировщик тут вполне вписывается в архитектуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:02 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Бред заключается в том, что ТС свалил, а вы тут спорите не пойми о чём ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:06 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Отсылать заявки по почте - это вообще моветон. Тут нужен Hadoop. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:08 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУТут планировщик подходит как нельзя кстати. Абсолютно как нельзя кстати.Ну расскажи, куда ты его собрался втыкать. МСУВо-первых, очередью может быть обычная таблица в БД.И этот человек тут рассуждает про "нагруженные системы". Polling плохо -- это раз. Locking для "select for update" -- это два. Катастрофически разная производительность операций insert/select/delete при таком сценарии работы -- три. Любой из этих пунктов положит твою "нагруженную" систему на лопатки. МСУВо-вторых, можно ничего этого не делать, а уведомлять по признаку в БД. Признаком может быть любая логическая конструкция в соответствии с требуемой бизнес логикой. Начиная от смены статусов заявки, кончая какими-то иными типами. И никакие очереди тут даром не нужны. После успешной отправки сообщения выставляется флаг отправленного уведомления. Никакой магии, конструкция проста как мир и надежна, как камень.Это опять какие-то пустопорожние сказки. Допустим, наступило какое-то условие -- заявка переведена из статуса А в статус Б. Ты отправляешь уведомление, отправка обламывается. Твои действия? МСУASP.NET Identity имеет самое прямое отношение к отсылке сообщений. Почему? Потому что есть встроенный внятный функционал. И если автору всё-таки захочется отправить сообщения прям из сайта по месту, то это самый подходящий вариант сделать это. При условии, что используется ASP.NET Identity, разумеется.Этот функционал печален и уныл. Identity не менее печален. Microsoft уже показало свою несостоятельность в этом вопросе -- сначала стандартная система авторизации и аутентификации в ASP.NET, потом Membership, потом Identity -- всё это проектировалось и писалось вообще без оглядки на то, как оно должно использоваться. А IIdentityMessageService -- это какой-то огрызок. МСУНахлобуч Установить заголовок. Например, List-Unsubscribe, который для каждого типа письма свой и должен передаваться извне Добавить формируемые извне же вложения Отправить письмо одновременно в HTML и в Plaintext Как извне указать Content-Encoding Легко. 1. IIdentityMessageService.SendAsync => MailMessage.Headers.Add("List-Unsubscribe", "< http://www.host.com/list.cgi?cmd=unsub&lst=list>, <mailto:list-request@host.com?subject=unsubscribe>"; 2. IIdentityMessageService.SendAsync => MailMessage.Attachments 3. IIdentityMessageService.SendAsync => MailMessage.AlternateViews 4. IIdentityMessageService.SendAsync => MailMessage.BodyEncoding[/quot] Смешно, ага. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Отправь мне из метода Signup() письмо со вложением и в двух форматах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:21 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучСмешно, ага. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Отправь мне из метода Signup() письмо со вложением и в двух форматах. А ещё польку станцевать, постирать носки и кофе сварить? С какого перепугу вложения должны прикрепляться из контроллера? Реализуешь IIdentityMessageService, там прикрепляешь свои вложения, добавляешь поля, пишешь прописью, приделываешь альтернативное содержимое, дудишь в гудок и отправляешь по адресу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:31 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttА ещё польку станцевать, постирать носки и кофе сварить? С какого перепугу вложения должны прикрепляться из контроллера? Реализуешь IIdentityMessageService, там прикрепляешь свои вложения, добавляешь поля, пишешь прописью, приделываешь альтернативное содержимое, дудишь в гудок и отправляешь по адресу. Код показывай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:33 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучhVosttВыходи из судорга и прекращай нести бред. Конкретнее. Бред ты несёшь, так как любая фоновая служба и есть по сути планировщик, хочешь ты этого или нет. Вопрос только в том, в какой момент и при каких условиях обрабатывать событие. Это можно настроить как угодно взяв наиболее подходящий инструмент, ты же углубляешься в ненужные сейчас детали и решил зачем-то пожонглировать терминами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:34 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучhVosttА ещё польку станцевать, постирать носки и кофе сварить? С какого перепугу вложения должны прикрепляться из контроллера? Реализуешь IIdentityMessageService, там прикрепляешь свои вложения, добавляешь поля, пишешь прописью, приделываешь альтернативное содержимое, дудишь в гудок и отправляешь по адресу. Код показывай. 16467578 место, где это делается я указал. дурачка-то не включай, я не буду тебе рисовать код отправки письма и прикрепления атачей, это тривиально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:36 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучЭтот функционал печален и уныл. Identity не менее печален. Microsoft уже показало свою несостоятельность в этом вопросе -- сначала стандартная система авторизации и аутентификации в ASP.NET, потом Membership, потом Identity -- всё это проектировалось и писалось вообще без оглядки на то, как оно должно использоваться. А IIdentityMessageService -- это какой-то огрызок. Обоснуй плз. А то набросы в духе "они все дураки и не лечатся, один я умный, знаю как надо, но вам не скажу!". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:38 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVostt 16467578 место, где это делается я указал. дурачка-то не включай, я не буду тебе рисовать код отправки письма и прикрепления атачей, это тривиально.Ладно, зайдем с другой стороны. Откуда вот в этом методе возьмутся вложения? Код: c# 1. 2. 3. 4. 5. Код, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:38 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучЛадно, зайдем с другой стороны. Откуда вот в этом методе возьмутся вложения? Код: c# 1. 2. 3. 4. 5. Код, пожалуйста. Тогда зайдём ещё с одной стороны, какие вложения и как ты собирался их отправлять по SMS? Задачу IdentityMessage ты так до сих пор и не вкурил, я смотрю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:42 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Нахлобуч, На случай, если ты всё ещё в глухом непробиваемом танке: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Пользователь регистрируется (или запрашивает услугу) и решает куда ему слать код подтвержения, на почту или на телефон. Или это решается исходя из действий пользователя, не суть важно. Важно то, что IdentityMessage -- это абстракция сообщения для задач ASP.NET Identity. За конкретную реализацию отправки отвечают конкретные сервисы. Хочешь передать больше информации? Передавай, не вопрос. IdentityMessage не является sealed, сечёшь? Добавь туда ещё десяток полей и будь здоров. В чём проблема-то я не пойму? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:46 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttБред ты несёшь, так как любая фоновая служба и есть по сути планировщик, хочешь ты этого или нет.Это какое-то новое слово в науке и технике. Вот тут ( 16459954 ) был явно упомянут Quartz.NET, который нужен только для одного: выполнять произвольные джобы по произвольному же расписанию. Внимание, вопрос: зачем в деле "отправить сообщение незамедлительно" какие-то джобы и расписания? hVostt...ты же углубляешься в ненужные сейчас детали и решил зачем-то пожонглировать терминами.Я с самого начала писал, что автору ничего не нужно усложнять и хай отправляет письма прямо из контроллера. В "ненужные детали" я "углубился" для того, чтобы рассказать, как строится архитектура надежного сервиса уведомлений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 13:49 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttВажно то, что IdentityMessage -- это абстракция сообщения для задач ASP.NET Identity. За конкретную реализацию отправки отвечают конкретные сервисы. Хочешь передать больше информации? Передавай, не вопрос. IdentityMessage не является sealed, сечёшь? Добавь туда ещё десяток полей и будь здоров. В чём проблема-то я не пойму?Самая большая проблема тут в том, что МСУ считает, что это поделие пригодно для отправки произвольных уведомлений пользователям. Изначально требовалось отправлять уведомление о создании новой заявки, что к задачам Identity Management никакого отношения не имеет и зачем тут использовать вообще что-либо из Microsoft.AspNet.Identity остается загадкой. Далее я вполне заслуженно назвал IIdentityMessageService унылым, потому что единственное, что он умеет "из коробки" -- это отправлять уведомления получателю с заданной темой и текстом. Возможно, этого хватает, чтобы отправить сообщения типа "Добро пожаловать на сайт", но не более. Попытка же слепить из этого что-то более потребное превращается в занимательные приседания с наследованием от IdentityMessage, реализацией своего EmailIdentityMessageService и связыванием всего этого синей изолентой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:00 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучЭто какое-то новое слово в науке и технике. Вот тут ( 16459954 ) был явно упомянут Quartz.NET, который нужен только для одного: выполнять произвольные джобы по произвольному же расписанию. Внимание, вопрос: зачем в деле "отправить сообщение незамедлительно" какие-то джобы и расписания? Это лишь одно из целого вороха решений, довольно популярное и стабильное. Зачем отдавать отправку отдельному сервису уже было сказано. Причин для этого не мало. Самая банальная, это ошибка отправки, может стоит попробовать через несколько минут ещё раз и сделать не менее 3 попыток. Это работа для планировщика. Сам бог велел. Ты же исходишь из принципа, что сообщения должны 100% немедленно отправляться, хотя никто никаких гарантий тебе не даёт однозначно. А письмо надо попытаться доставить. Да и с архитектурной точки зрения, сунул письмо в очередь на отправку и успокоился. Надо отправить по-быстрее, укажи приоритет. В чём проблема, ещё раз спрашиваю? На кой ляд городить это говнище в коде с созданием каких-то тасков в контроллере? Что с этим убожеством делать потом? Как сопровождать? НахлобучЯ с самого начала писал, что автору ничего не нужно усложнять и хай отправляет письма прямо из контроллера. Я с самого начала писал, что не надо решать и тем более думать за автора. Почему надо априори считать его дураком? Если он задал вопрос "как лучше", значит наверное он хочет выслушать мнения на этот счёт. На счёт "как лучше", ещё в который раз уточню. Лучше значит, надёжно, сопровождаемо, расширяемо и управляемо. Ты предлагаешь какой-то убогий костыль, мотивируя тем, что типа так быстрее закодить. Это ты можешь студентам посоветовать, которые лабы сдают старичью, которое даже их толком не проверяет. НахлобучВ "ненужные детали" я "углубился" для того, чтобы рассказать, как строится архитектура надежного сервиса уведомлений. Ты рассказываешь как лепить убогие костыли, и слово "архитектура" здесь не уместно в принципе. Это как Равшан будет рассказывать архитектуру про то, как он унитаз в раковину превратил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:14 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучСамая большая проблема тут в том, что МСУ считает, что это поделие пригодно для отправки произвольных уведомлений пользователям. Он указал один из способов наиболее близких к тому, что ты предлагал без использования джобов, но с архитектурной точки зрения эффективно. Естетственно у данного решения есть свой ограниченный круг задач. Ты же начал лепить какие-то аттачи, которые непременно должны прилетать напрямую из контроллера. И даже эта задача решается без каких-либо проблем. О чем сетуешь не пойму? НахлобучДалее я вполне заслуженно назвал IIdentityMessageService унылым, потому что единственное, что он умеет "из коробки" -- это отправлять уведомления получателю с заданной темой и текстом. Возможно, этого хватает, чтобы отправить сообщения типа "Добро пожаловать на сайт", но не более. Попытка же слепить из этого что-то более потребное превращается в занимательные приседания с наследованием от IdentityMessage, реализацией своего EmailIdentityMessageService и связыванием всего этого синей изолентой. См. выделенное. Не "возможно", а совершенно точно, только это и нужно. И никакой синей изоленты не нужно, всё уже разложено по полочкам и можно использовать, при чём раз написанный сервис может кочевать из проекта в проект. В этом один из смыслов архитектурной декомпозиции, каждый кирпичик в известном смысле независим и в тоже время хорошо ложится рядом с другими. Я так и не увидел объяснений "убогости" с твоей стороны. Твоя задача с аттачами и погремушками решается в лёгкую, хоть через наследование, хоть через интерфейсы, выбирай по вкусу. Но вообще, это не требуется. Для массовой рассылки с погремушками нужны другие инструменты и планировщик для этого подходит более чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:21 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttНа кой ляд городить это говнище в коде с созданием каких-то тасков в контроллере? Что с этим убожеством делать потом? Как сопровождать?Таски я не предлагал, привет. Ты же предложил Кварц, который, вообще говоря, нужно держать вне веб-приложения, заводить под него БД и т.д. Ты вообще представляешь объем работы? hVosttЯ с самого начала писал, что не надо решать и тем более думать за автора.С самого начала ты писал про Кварц, напомню. hVosttЛучше значит, надёжно, сопровождаемо, расширяемо и управляемо.Формальные критерии измерения "сопровожаемости", "расширяемости" и т.д. в студию. hVosttТы предлагаешь какой-то убогий костыль, мотивируя тем, что типа так быстрее закодить. Это ты можешь студентам посоветовать, которые лабы сдают старичью, которое даже их толком не проверяет.Я предлагаю достаточное на данный момент решение. Программисту платят не за красивый и расширяемый код, а за то, что он решает бизнес-задачи в подходящие бизнесу сроки. Это не значит, что нужно говнокодить направо и налево. Но и заниматься разработкой всесторонне расширяемого отправлятора для отправки писем ровно для одного бизнес-кейса не нужно. hVosttТы рассказываешь как лепить убогие костыли, и слово "архитектура" здесь не уместно в принципе. Это как Равшан будет рассказывать архитектуру про то, как он унитаз в раковину превратил.Ты можешь, используя технические термины и корректные аргументы, пояснить, почему то, что я предлагаю -- убогие костыли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:30 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
закладка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:41 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
hVosttОн указал один из способов наиболее близких к тому, что ты предлагал без использования джобов, но с архитектурной точки зрения эффективно. Естетственно у данного решения есть свой ограниченный круг задач. Ты же начал лепить какие-то аттачи, которые непременно должны прилетать напрямую из контроллера. И даже эта задача решается без каких-либо проблем. О чем сетуешь не пойму? "Без проблем" текущая задача решается только с помощью всем известного SmtpClient. Все дополнительные абстракции только нужны только для того, чтобы потешить самолюбие и когда-нибудь с блеском протечь. Я уже устал повторять: ASP.NET Identity (которую, кстати говоря, автор может и не использовать в проекте) нужна для управления пользователями, авторизации и аутентификации. В процессе работы она может отправлять кому-то какие-то уведомления, но это совершенно не повод использовать её куцый механизм отправки уведомлений об Identity Lifecycle для отправки вообще всех уведомлений. Плюс советуемый МСУ UserManager<TUser, TKey>.SendEmailAsync Method подразумевает, что пользователь зарегистрирован на сайте. Очень смелое допущение. hVosttНахлобучДалее я вполне заслуженно назвал IIdentityMessageService унылым, потому что единственное, что он умеет "из коробки" -- это отправлять уведомления получателю с заданной темой и текстом. Возможно, этого хватает, чтобы отправить сообщения типа "Добро пожаловать на сайт", но не более. Попытка же слепить из этого что-то более потребное превращается в занимательные приседания с наследованием от IdentityMessage, реализацией своего EmailIdentityMessageService и связыванием всего этого синей изолентой.См. выделенное. Не "возможно", а совершенно точно, только это и нужно.Ты точно внимательно читал? RDS1) Пользователь вносит заявку, заполняя поля формы; 2) Нажимает кнопку Сохранить; 3) Запускается действие контроллера, там заявка сохранятся в базе через репозиторий. 4) .... и теперь надо разослать копии писем всем заинтересованным лицам...Где тут хотя бы намек на то, что задача связана с ASP.NET Identity? hVosttЯ так и не увидел объяснений "убогости" с твоей стороны. Прошу , раздел "Background: Membership in ASP.NET". hVosttТвоя задача с аттачами и погремушками решается в лёгкую, хоть через наследование, хоть через интерфейсы, выбирай по вкусу.Да-да, всё одинаково криво будет. hVosttНо вообще, это не требуется. Для массовой рассылки с погремушками нужны другие инструменты и планировщик для этого подходит более чем.Ты точно внимательно читал? Какие массовые рассылки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:43 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучМСУТут планировщик подходит как нельзя кстати. Абсолютно как нельзя кстати.Ну расскажи, куда ты его собрался втыкать. Так вроде уже рассказывал. Втыкать я его собрался в вин сервис рассылки уведомлений. Сервис крутится по определенному расписанию и шлет письма. За основу реализации расписания можно взять тот же кварц. НахлобучМСУВо-первых, очередью может быть обычная таблица в БД.И этот человек тут рассуждает про "нагруженные системы". Polling плохо -- это раз. Locking для "select for update" -- это два. Катастрофически разная производительность операций insert/select/delete при таком сценарии работы -- три. Любой из этих пунктов положит твою "нагруженную" систему на лопатки. Ого, давненько так не отжигали на форуме фантазёры. Ну ладно, по-порядку. Polling плох чем и в контексте чего? Откуда Locking на чтение, с дубу рухнул? Срочно читать про изоляции транзакций, недавно одному неучу рассказывал про Lock:Escalation. При правильных индексах и прямых руках у тебя CRUD будет просто летать, а не то, что тормозить. Так что попробуй испугай кого-нибудь другого лопатками. НахлобучМСУВо-вторых, можно ничего этого не делать, а уведомлять по признаку в БД. Признаком может быть любая логическая конструкция в соответствии с требуемой бизнес логикой. Начиная от смены статусов заявки, кончая какими-то иными типами. И никакие очереди тут даром не нужны. После успешной отправки сообщения выставляется флаг отправленного уведомления. Никакой магии, конструкция проста как мир и надежна, как камень.Это опять какие-то пустопорожние сказки. Допустим, наступило какое-то условие -- заявка переведена из статуса А в статус Б. Ты отправляешь уведомление, отправка обламывается. Твои действия? Это не сказки, это простое решение задачи. По твоему примеру, 1. Заявка переведена из статуса А в статус Б 2. Устанавливается флаг "Оповестить" для уведомления подписчикам (отдельная таблица со ссылкой на заявку) 3. Сервис уведомлений согласно расписанию опрашивает флаги этой таблицы и на основе них делает рассылку 4. Письмо выслано, устанавливается флаг в соответствующее значение "Уведомление выслано" 5. Письмо не выслано, устанавливается флаг значение "Ошибка", пишется текст ошибки НахлобучМСУASP.NET Identity имеет самое прямое отношение к отсылке сообщений. Почему? Потому что есть встроенный внятный функционал. И если автору всё-таки захочется отправить сообщения прям из сайта по месту, то это самый подходящий вариант сделать это. При условии, что используется ASP.NET Identity, разумеется.Этот функционал печален и уныл. Identity не менее печален. Microsoft уже показало свою несостоятельность в этом вопросе -- сначала стандартная система авторизации и аутентификации в ASP.NET, потом Membership, потом Identity -- всё это проектировалось и писалось вообще без оглядки на то, как оно должно использоваться. А IIdentityMessageService -- это какой-то огрызок. Огрызок - это то место, которое не думает и не пытается анализировать. IIdentityMessageService - это внятный механизм подключения сервиса сообщений. Причем, можно легко использовать two factor messages. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Так что твои унылые потуги надругаться над ASP.NET Identity идут в лес. Поплачь в другом месте. НахлобучОтправь мне из метода Signup() письмо со вложением и в двух форматах. Пристыкуй для менеджера свой IIdentityMessageService и рассылай хоть корову в мешке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:51 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучhVosttНа кой ляд городить это говнище в коде с созданием каких-то тасков в контроллере? Что с этим убожеством делать потом? Как сопровождать?Таски я не предлагал, привет. Ты предложил прямо по месту отправить сообщение, "Разовая акция". Как это может коррелировать с более или менее внятной архитектурой? Произошла ошибка отправки. Дальше что делать с твоей разовой акцией? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:56 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучhVosttНо вообще, это не требуется. Для массовой рассылки с погремушками нужны другие инструменты и планировщик для этого подходит более чем.Ты точно внимательно читал? Какие массовые рассылки? Ты читаешь посты попой? RDS1) Пользователь вносит заявку, заполняя поля формы; 2) Нажимает кнопку Сохранить; 3) Запускается действие контроллера, там заявка сохранятся в базе через репозиторий. 4) .... и теперь надо разослать копии писем всем заинтересованным лицам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 14:59 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Нахлобуч, "заинтересованных лиц" может быть сотня, тысяча. Ты собираешься этот делать такую отправку прям из контроллера? Ты сдурел? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:01 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучПлюс советуемый МСУ UserManager<TUser, TKey>.SendEmailAsync Method подразумевает, что пользователь зарегистрирован на сайте. Очень смелое допущение. А кто говорил, что SendEmailAsync - серебряная пуля? Это простое решение "по месту" шлёпнуть сообщение из сайта. У способа есть и минусы и плюсы. К тому же, я акцентировал своё внимание именно на отдельной песочнице и шедулере, а не на SendEmailAsync. Еще раз спрашиваю, ты каким местом читаешь топик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:04 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучhVosttдобавляете задание шедулеру, в шедулере реализуете обработку очереди и отправку писем.Планировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным. НахлобучНе нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:06 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУОго, давненько так не отжигали на форуме фантазёры. Ну ладно, по-порядку. Polling плох чем и в контексте чего?Polling плох в контексте БД. Расходование ресурсов на поддержание ACIDности. МСУОткуда Locking на чтение, с дубу рухнул?Расскажи, как ты будешь добиваться того, чтобы одно и то же уведомление не отправлялось из всех потоков (или процессов), в которых работают отправлятели уведомлений. МСУПри правильных индексах и прямых руках у тебя CRUD будет просто летать, а не то, что тормозить. Индексы мешают вставкам и удалениям, их отсутствие мешает поиску, что, в свете предыдущего пункта, мешает вставкам. МСУЭто не сказки, это простое решение задачи. По твоему примеру, 1. Заявка переведена из статуса А в статус Б 2. Устанавливается флаг "Оповестить" для уведомления подписчикам (отдельная таблица со ссылкой на заявку) 3. Сервис уведомлений согласно расписанию опрашивает флаги этой таблицы и на основе них делает рассылку 4. Письмо выслано, устанавливается флаг в соответствующее значение "Уведомление выслано" 5. Письмо не выслано, устанавливается флаг значение "Ошибка", пишется текст ошибкиУх ты. А теперь представь ситуацию: 1. Заявка переведена из А в Б 2. Установился флаг, ссылка, все дела 3. Твой планировщик спит 4. Заявка переведена из Б в В 5. Опять установился флаг, ссылка на ту же заявку, которая уже находится в статусе В 6. Просыпается планировщик и отправляет подряд два уведомления, причем данных для формирования первого уведомления в БД уже нет (статус-то сменился). МСУIIdentityMessageService - это внятный механизм подключения сервиса сообщений. Причем, можно легко использовать two factor messages.Это ограниченный механизм, предназначенный только для отправки всяких околоайдентитьных сообщений. Больше он ни на что не годен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:07 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Внимание вопрос, откуда Буч узнал про десяток-другой получателей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:08 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУ, не флуди. МСУТы предложил прямо по месту отправить сообщение, "Разовая акция". Как это может коррелировать с более или менее внятной архитектурой? Произошла ошибка отправки. Дальше что делать с твоей разовой акцией?По мере возможности обработать по месту и ждать поступления новых вводных от бизнеса. МСУНахлобуч, "заинтересованных лиц" может быть сотня, тысяча. Ты собираешься этот делать такую отправку прям из контроллера? Ты сдурел? Нет, их не сотня и не тысяча. Какой смысл отправлять даже сотне человек уведомление о том, что кто-то создал заявку? МСУНахлобучПлюс советуемый МСУ UserManager<TUser, TKey>.SendEmailAsync Method подразумевает, что пользователь зарегистрирован на сайте. Очень смелое допущение. А кто говорил, что SendEmailAsync - серебряная пуля? Это простое решение "по месту" шлёпнуть сообщение из сайта. У способа есть и минусы и плюсы. Самое простое -- это SmtpClient. Тащить весь остальной шлак для "по месту" нет никакой необходимости. И плюсов у "способа" нет. МСУНахлобучпропущено... Планировщик-то тут зачем? Разовая же акция. Очередь же тут была бы к месту, но тащить целую очередь ради банальной отправки писем десятку-другому получателей считаю несколько чрезмерным. НахлобучНе нужно заниматься интеллектуальным онанизмом и придумывать решения несуществующих проблем. Что тут тебя так развеселило? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:16 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучPolling плох в контексте БД. Расходование ресурсов на поддержание ACIDности. Запретим БД. Вообще. Будем помнить всё в уме. Так? Не устал фантазировать на пустом месте? НахлобучМСУОткуда Locking на чтение, с дубу рухнул?Расскажи, как ты будешь добиваться того, чтобы одно и то же уведомление не отправлялось из всех потоков (или процессов), в которых работают отправлятели уведомлений. Расскажи, откуда ты взял, что у меня будет несколько отправителей уведомлений? Отправитель уведомлений один и работает он в одном процессе и в одном потоке. А задачи на рассылку он может ставить асинхронно. Например, получил 1 тыс подписчиков, раскидал задачи на 10 тредов и вперед. Что тут ты собрался синхронизировать? Каждый тред не зависит от друг друга, полностью автономная работа. Чего ты там опять куришь? НахлобучМСУПри правильных индексах и прямых руках у тебя CRUD будет просто летать, а не то, что тормозить. Индексы мешают вставкам и удалениям, их отсутствие мешает поиску, что, в свете предыдущего пункта, мешает вставкам. В архитектуре статусов ничего удалять не нужно. Поэтому именно эта архитектура более гибка и поддерживаема, чем очередь. НахлобучА теперь представь ситуацию: 1. Заявка переведена из А в Б 2. Установился флаг, ссылка, все дела 3. Твой планировщик спит 4. Заявка переведена из Б в В 5. Опять установился флаг, ссылка на ту же заявку, которая уже находится в статусе В 6. Просыпается планировщик и отправляет подряд два уведомления, причем данных для формирования первого уведомления в БД уже нет (статус-то сменился). Какой ужас. 1. Планировщик видит, что есть 2 уведомления для 1 адреса. Он тупо склеивает эти 2 уведомления в одно и отправляет подписчику. 2. Либо планировщик отправляет 1 самое актуальное уведомление, забивая болт на предыдущие. НахлобучМСУIIdentityMessageService - это внятный механизм подключения сервиса сообщений. Причем, можно легко использовать two factor messages.Это ограниченный механизм, предназначенный только для отправки всяких околоайдентитьных сообщений. Больше он ни на что не годен. И тем не менее, он имеет право на жизнь. И говорить о том, что его нельзя использовать в простых сценариях, глупо. Точно так же глупо, как говорить о том, что ASP.NET Identity убогое гавно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:18 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучМСУТы предложил прямо по месту отправить сообщение, "Разовая акция". Как это может коррелировать с более или менее внятной архитектурой? Произошла ошибка отправки. Дальше что делать с твоей разовой акцией?По мере возможности обработать по месту и ждать поступления новых вводных от бизнеса. Что за бред? Каких поступлений, какой бизнес? Что ты несешь? )) НахлобучМСУНахлобуч, "заинтересованных лиц" может быть сотня, тысяча. Ты собираешься этот делать такую отправку прям из контроллера? Ты сдурел? Нет, их не сотня и не тысяча. Какой смысл отправлять даже сотне человек уведомление о том, что кто-то создал заявку? Откуда ты знаешь, сколько подписчиков должно быть? Ты генератор требований? Что значит, какой смысл отправлять сообщение сотне человек? Они подписаны на ресурс, значит их нужно уведомить. У нас в конторе есть портал на шарепоинте, есть списки и библиотеки документов сотрудников, на которые подписаны участники. Их количество достигает более 1 тыс на популярных библиотеках (приказы, документы по поставщикам, юридическая информация и так далее). Всего в компании немногим менее 10 тыс человек. Если ты там сидишь и работаешь в коморке с 3 калеками, то это не значит, что не может быть большое число подписчиков. НахлобучМСУпропущено... А кто говорил, что SendEmailAsync - серебряная пуля? Это простое решение "по месту" шлёпнуть сообщение из сайта. У способа есть и минусы и плюсы. Самое простое -- это SmtpClient. Тащить весь остальной шлак для "по месту" нет никакой необходимости. И плюсов у "способа" нет. Так в SendEmailAsync и используется SmtpClient, включи уже голову. НахлобучЧто тут тебя так развеселило? Твоя тупость. Серьезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:24 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУНахлобучPolling плох в контексте БД. Расходование ресурсов на поддержание ACIDности.Запретим БД. Вообще. Будем помнить всё в уме. Так? Не устал фантазировать на пустом месте?По делу будет что-то? МСУРасскажи, откуда ты взял, что у меня будет несколько отправителей уведомлений? Отправитель уведомлений один и работает он в одном процессе и в одном потоке. А задачи на рассылку он может ставить асинхронно. Например, получил 1 тыс подписчиков, раскидал задачи на 10 тредов и вперед. Что тут ты собрался синхронизировать? Каждый тред не зависит от друг друга, полностью автономная работа. Чего ты там опять куришь?Отличненько, уже какие-то потоки пошли в дело. Откуда они возьмутся, если "уведомлений один и работает он в одном процессе и в одном потоке"? Какие задачи, кому он их ставит? МСУВ архитектуре статусов ничего удалять не нужно. Поэтому именно эта архитектура более гибка и поддерживаема, чем очередь.Опять какие-то голословные утверждения. МСУКакой ужас.Ужас-не ужас, а еще пара-тройка таких находок -- и твой планировщик превратится в крысиное гнездо кода. Слияние уведомлений, определение самого актуального -- все это нетривиально. А если тексты уведомлений формировать непосредственно в момент наступления событий, то всех этих проблем с консистентностью можно избежать. МСУИ тем не менее, он имеет право на жизнь. И говорить о том, что его нельзя использовать в простых сценариях, глупо.Глупо его использовать в сценариях, для которых он вообще никак не предназначен. Отправка уведомлений о событиях, не связанных с Identity, -- один из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:36 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
МСУЧто за бред? Каких поступлений, какой бизнес? Что ты несешь? ))Я не пойму, что тебя так смешит. Автор пишет софт для удовлетворения каких-то бизнес-потребностей. Если недоставка некоторых уведомлений не является проблемой, то можно остановиться на самом простом работающем решении -- отправка "по месту". Если же бизнес потребует "доставки любой ценой", то нужно будет думать отдельно. МСУОткуда ты знаешь, сколько подписчиков должно быть? Ты генератор требований?Нет, я просто знаю, что в случае, когда от человека требуется какая-то деятельная реакция (а именно она нужна в ответ на уведомление о поступление новой заявки), размазывать ответственность по сотне человек никто не будет. МСУЧто значит, какой смысл отправлять сообщение сотне человек? Они ... это не значит, что не может быть большое число подписчиков.Молодец, похвастался. Дальше что? Как это относится к теме? МСУТак в SendEmailAsync и используется SmtpClient, включи уже голову.Вот правда -- и что с того? Он прячет его за убогим API, не добавляя никакой ценности. Абсолютно. Просто прослойка. МСУНахлобучЧто тут тебя так развеселило?Твоя тупость. Серьезно.Браво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 15:44 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучМСУпропущено... Запретим БД. Вообще. Будем помнить всё в уме. Так? Не устал фантазировать на пустом месте?По делу будет что-то? Вот именно, по делу что-то будет? Или будешь дальше писать о страшилках использования БД? НахлобучМСУРасскажи, откуда ты взял, что у меня будет несколько отправителей уведомлений? Отправитель уведомлений один и работает он в одном процессе и в одном потоке. А задачи на рассылку он может ставить асинхронно. Например, получил 1 тыс подписчиков, раскидал задачи на 10 тредов и вперед. Что тут ты собрался синхронизировать? Каждый тред не зависит от друг друга, полностью автономная работа. Чего ты там опять куришь?Отличненько, уже какие-то потоки пошли в дело. Откуда они возьмутся, если "уведомлений один и работает он в одном процессе и в одном потоке"? Какие задачи, кому он их ставит? Так ты сам начал про "процессы и потоки". А теперь меня обвиняешь в этом. Странный ты. Не "уведомлений один", а "Отправитель уведомлений один". Почувствуй разницу. С чего ты решил, что должно быть несколько отправителей уведомлений. Вот твой высер, если что: НахлобучРасскажи, как ты будешь добиваться того, чтобы одно и то же уведомление не отправлялось из всех потоков (или процессов), в которых работают отправлятели уведомлений. Как объяснишь свой вопрос? Еще раз, "отправлятель уведомлений" один. А рассылка уведомлений может идти асинхронно в несколько независимых потоков. Что не понятного я сейчас сказал? НахлобучМСУВ архитектуре статусов ничего удалять не нужно. Поэтому именно эта архитектура более гибка и поддерживаема, чем очередь.Опять какие-то голословные утверждения. Что именно голословно утверждено и почему? Будешь приводить аргументы или просто какать в форум невнятными формулировками? НахлобучМСУКакой ужас.Ужас-не ужас, а еще пара-тройка таких находок -- и твой планировщик превратится в крысиное гнездо кода. Слияние уведомлений, определение самого актуального -- все это нетривиально. Склейка сообщений для одного реципиента - это нетривиально? Могу предложить земледелие, там всё тривиально, бери лопату и копай. НахлобучА если тексты уведомлений формировать непосредственно в момент наступления событий, то всех этих проблем с консистентностью можно избежать. Зачем заранее формировать тексты и, тем более, хранить их где-то? Это же феерический бред, дублирование и просто антипаттерн. И ты что-то собрался нам рассказывать об архитектуре? НахлобучМСУИ тем не менее, он имеет право на жизнь. И говорить о том, что его нельзя использовать в простых сценариях, глупо.Глупо его использовать в сценариях, для которых он вообще никак не предназначен. Отправка уведомлений о событиях, не связанных с Identity, -- один из них. Сценарий только один - отправка сообщения пользователю с темой и телом сообщения. Для этого вполне можно использовать нативный механизм ASP.NET Identity. В чем проблема? Кто запрещает? НахлобучМСУЧто за бред? Каких поступлений, какой бизнес? Что ты несешь? ))Я не пойму, что тебя так смешит. Автор пишет софт для удовлетворения каких-то бизнес-потребностей. Если недоставка некоторых уведомлений не является проблемой, то можно остановиться на самом простом работающем решении -- отправка "по месту". Если же бизнес потребует "доставки любой ценой", то нужно будет думать отдельно. Автор конкретно спросил совета. Ты посоветовал глупость. Делать массовую отправку сообщений по месту в контроллере - удел кретина, а не программиста или архитектора. С этим согласен? И бизнес тут не причем, не нужно его сюда примешивать. Бизнес ничего не знает и не должен знать об архитектуре рассылки уведомлений. НахлобучМСУОткуда ты знаешь, сколько подписчиков должно быть? Ты генератор требований?Нет, я просто знаю, что в случае, когда от человека требуется какая-то деятельная реакция (а именно она нужна в ответ на уведомление о поступление новой заявки), размазывать ответственность по сотне человек никто не будет. Ну это только твои фантазии, которые не подкреплены практикой. С рабочими процессами в системах электронного документооборота работал? Рассказать про такой классический воркфлоу, как "Согласование документа"? НахлобучМСУЧто значит, какой смысл отправлять сообщение сотне человек? Они ... это не значит, что не может быть большое число подписчиков.Молодец, похвастался. Дальше что? Как это относится к теме? Это аргумент того, что твои утверждения про то, что "не может быть более 20 подписчиков" - наглая ложь. И даже в случае 20 подписчиков отправлять им сообщения "по месту" в контроллере - беспощадное зло. Согласен? НахлобучМСУТак в SendEmailAsync и используется SmtpClient, включи уже голову.Вот правда -- и что с того? Он прячет его за убогим API, не добавляя никакой ценности. Абсолютно. Просто прослойка. Так весь фреймворк - прослойка, которая что-то где-то прячет. Ценность твоих сообщений в данном топике ниже плинтуса. В чем суть твоего бытия тут? Просто зашел покакать напалмом? НахлобучМСУпропущено... Твоя тупость. Серьезно.Браво. Ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 16:09 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Ребят, спасибо за ответы. Мне больше по душе пришелся вариант с планировщиком. Проясню некоторые детали, оператору по телефону звонят работники, и говорят что и кому нужно, например, привезти какую-то деталь, увезти крупный мусор и т.д. За привоз деталей отвечает 1-ое подразделение, за вывоз мусора к примеру 2-ое подразделение и т.д. За каждым подразделением закреплены исполнители, их не больше 10, и пару заинтересованных лиц, которые следят за исполнением заявок. Примерно, для одной заявки, необходимо разослать копии письма 12 человекам. Если сразу дали 5 заявок, то соответственно 120 писем. После того, как оператор заполнил формы для 5-ти заявок, он нажимает кнопку сохранить, заявки должны сохраниться в базе, и быть разосланы всем заинтересованным лицам. Главное чтобы интерфейс не подвисал, когда будет происходить рассылка писем, потому что на оператора "сыпятся заявки" - он только сохранил, тут же ему снова диктуют(только для другого цеха). Скажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 18:52 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
RDSСкажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает? Я уже писал: http://www.quartz-scheduler.net/ Запускать консольку планировщиком задач -- очень плохое, неуправляемое и неконтролируемое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 19:40 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучВот правда -- и что с того? Он прячет его за убогим API, не добавляя никакой ценности. Абсолютно. Просто прослойка. Ты вообще в адеквате? Такой детский неумный лепет нести, зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 19:43 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
RDSРебят, спасибо за ответы. Мне больше по душе пришелся вариант с планировщиком. Проясню некоторые детали, оператору по телефону звонят работники, и говорят что и кому нужно, например, привезти какую-то деталь, увезти крупный мусор и т.д. За привоз деталей отвечает 1-ое подразделение, за вывоз мусора к примеру 2-ое подразделение и т.д. За каждым подразделением закреплены исполнители, их не больше 10, и пару заинтересованных лиц, которые следят за исполнением заявок. Примерно, для одной заявки, необходимо разослать копии письма 12 человекам. Если сразу дали 5 заявок, то соответственно 120 писем. После того, как оператор заполнил формы для 5-ти заявок, он нажимает кнопку сохранить, заявки должны сохраниться в базе, и быть разосланы всем заинтересованным лицам. Главное чтобы интерфейс не подвисал, когда будет происходить рассылка писем, потому что на оператора "сыпятся заявки" - он только сохранил, тут же ему снова диктуют(только для другого цеха). Скажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает?А не проще ли внедрить/интегрировать готовый продукт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 21:01 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
Нахлобуч17-77а ваш Postmark и есть "планировщик"/"очередь", только вне рамок реализуемой системы, определитесь уже - нужен он или нет Разницу между "планировщиком" и "очередью" понимаешь? Не важно как называется хрень, которая в фоновом процессе отправляет почту, насколько я помню вы предлагали отправлять письма напрямую из контроллера, не используя ни планировщик, ни очередь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 22:49 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
RDSСкажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает? Да, нормальный рабочий вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 22:58 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
НахлобучА теперь представь ситуацию: 1. Заявка переведена из А в Б 2. Установился флаг, ссылка, все дела 3. Твой планировщик спит 4. Заявка переведена из Б в В 5. Опять установился флаг, ссылка на ту же заявку, которая уже находится в статусе В 6. Просыпается планировщик и отправляет подряд два уведомления, причем данных для формирования первого уведомления в БД уже нет (статус-то сменился). Зависит от бизнеса, будет требование слать все уведомления - значит надо их генерить сразу и сохранять где либо до момента отправки, будет требование слать только последнее - значит будет отправлятся только последнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 23:03 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
RDSСкажите имеет ли право на реализацию такой вариант. Я напишу консольное приложение, которое будет подключаться к базе и смотреть какие письма стоят в очереди и будет их рассылать. Данное приложение будет запускаться через определенные промежутки времени планировщиком задач Windows'а??? Я думаю мне бы такой вариант подошел как нельзя лучше! Кто, что думает? Я бы не завязывался на планировщик винды, а сделал бы свою вин-службу на кварце, как в самом первом ответе в теме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2014, 23:06 |
|
||
|
EmailSender в asp.net mvc
|
|||
|---|---|---|---|
|
#18+
17-77Зависит от бизнеса, будет требование слать все уведомления - значит надо их генерить сразу и сохранять где либо до момента отправки Не в коем случае. 1. Каждое изменение статуса заявки логируется в отдельную табличку (ID, ID заявки, Статус заявки, Дата/Время, Флаг процессинга). Можно дополнить дополнительной информацией при необходимости. Напр., ID пользователя, Сообщение об ошибке и т.д. 2. Песочница, которая процессит рассылку, анализирует эту таблицу и отсылает письма. Текст письма берется из некоего шаблона, который хранится где угодно. Сохранять готовые сообщения по факту для последующих рассылок - это избыточность и мазохизм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2014, 09:23 |
|
||
|
|

start [/forum/topic.php?all=1&fid=18&tid=1357059]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 370ms |

| 0 / 0 |
