Нужны предложения на фоне работника - PullRequest
4 голосов
/ 25 мая 2011

Я хочу разработать приложение для доставки (самостоятельно размещенный сервис WCF), которое позволяет планировать электронные письма. Пользователь назначит расписание на электронную почту и отправит его. Служба WCF должна иметь возможность выбрать электронное письмо и отправить его в назначенное время.

Какой подход я должен использовать здесь? Я думаю о следующих альтернативах

  1. Использовать фоновый рабочий поток для выполнения этой задачи
  2. Любая сторонняя служба планирования (я еще не расследовал это)

Может ли кто-нибудь предложить мне возможное решение для этого помимо вышеупомянутых двух?

[Изменить]: Могу ли я использовать агенты SQL для этого?

Спасибо

Ram

Ответы [ 3 ]

1 голос
/ 25 мая 2011

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

Если вы используете SQL Server, вы можете отправлять электронные письма непосредственно с него, а также планировать заданияотправлять электронные письма, избавляя вас от необходимости развертывания службы Windows.

0 голосов
/ 26 мая 2011

Я видел "... кроме вышеупомянутых двух ...", но я думаю, что больше ничего не достигнуть этого :) Либо создайте бесконечный цикл внутри службы Windows, например:

private void DoTheThing()
    {
        try
        {
            while (true)
            {
                TheThing e = new TheThing();
                Thread t = new Thread(new ThreadStart(e.Run));
                t.Start();
                Thread.Sleep(1000);
            }
        }
        catch (ThreadAbortException) { }
        catch (Exception ex) { /* Whatever error handling you got */ }
    }

... где у TheThing есть метод Run, который делает все, что вам нужно, каждую 1 секунду.Это выглядит глупо (хотя (верно) - да, верно), но работает без перерыва с .NET 1.0 как минимум на 30 серверах :) Просто убедитесь, что вы вызываете этот метод DoTheThing при запуске службы Windows в новом потоке.

Надеюсь, это поможет:)

0 голосов
/ 25 мая 2011

Это зависит от ваших нефункциональных требований ... :-)

Я могу представить, что вы хотели бы получить некоторую надежность в этом сервисе. Срок службы службы WCF зависит от ее хоста. Например. если это IIS, пул приложений будет перезапущен после определенного времени простоя (в IIS не поступает никаких запросов). Это будет ссылаться на другое решение, чем фоновый работник. Как вы предполагаете, это может быть сторонний планировщик, но в Windows также есть планировщик. (см. http://technet.microsoft.com/en-us/library/dd363786(WS.10).aspx) С помощью небольшой консольной программы вы можете попросить планировщик Windows позвонить в вашу службу или же отправить само письмо.

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