Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Некая "асинхронная служба" в WCF'e, Рассылка новостей и подтверждений регист 
:(
    Опции темы
SoulB
Дата 9.9.2009, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.9.2009

Репутация: нет
Всего: нет



Дали задание. Сделать некий фоновый процесс, который будет работать в WCFе, бегать по базе данных с определенным промежутком времени и делать рассылку новостей, а также подтверждение регистраций на сайте. Ни разу не работал с потоками, накачал литературы с нэта, видео уроки. Уже научился отправлять почту через SMTP клиент (SendAsync). Но когда показал, сказали, что сделал не то. Нужно чтобы все происходило автоматически. Что можно придумать, чтобы процесс запускался автоматически в другом потоке и как мне узнать в будущем работает ли этот процесс в потоке в данный момент.

Использовал литературу:
Коварный код. Масштабируемые приложения и асинхронное программирование в ASP.NET
Джеффри РИХТЕР 
Асинхронное программирование (INTUIT_._RU)
Видео HDI ASP Asynchronous Email (by Chris Pels) на сайте ASP.NET

Сам сейчас работаю учеником программиста  smile 
PM MAIL WWW   Вверх
SoulB
Дата 11.9.2009, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 4.9.2009

Репутация: нет
Всего: нет



Додумался  smile! . Просто определил конструктор в WCFе и сделал запуск thread'а, при этом запустив Mutex, чтобы не запускался еще один threadинг в другом потоке.
Кому интересно прикрепляю фрагмент кода:

Код

  public class Service1 : IService1
    {
        int i = 1;
        Mutex mutex = null;      
        Service1()
        {
            try
            {
                mutex = Mutex.OpenExisting("backgroundService");
            }

            catch (WaitHandleCannotBeOpenedException ex)
            {
                Console.WriteLine(ex.Message);
            }

            if (mutex == null)
            {
                mutex = new Mutex(false, "backgroundService");
                Thread backThread = new Thread(new ThreadStart(Streaming));
                backThread.Start();
                
            }
            
            GC.KeepAlive(mutex);   
            
        }

     void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            System.Timers.Timer timer = (System.Timers.Timer)sender;
            timer.Stop();
            Console.WriteLine("Called Method for " + i + " time");
            i++; 
            timer.Start();
        }

        private void Streaming()
        {
            System.Timers.Timer timer = new System.Timers.Timer(TimeSpan.FromSeconds(5).TotalMilliseconds);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            timer.Start();                       
        }
}



Можно, конечно, обойтись и без таймера, сделать выполнение операции в цикле при этом включить sleep. Просто, нужно было разобраться в реализации.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.