Как сделать так, чтобы служба не получала сообщения в определенное время - PullRequest
0 голосов
/ 29 марта 2010

В настоящее время я изучаю wcf для готовящегося проекта. Служба, которую я создаю, использует MSMQ для обновления базы данных, но база данных не может принимать сообщения в определенное время.

Служба будет службой Windows. Одна вещь, с которой я сталкиваюсь в данный момент, это то, как я могу заставить службу перестать читать сообщения из очереди в это время, например, скажем, я не хочу читать сообщения из очереди по воскресеньям. Как бы я пошел о реализации этого. Чтобы клиент мог отправлять сообщения в очередь, которая обновляет базу данных, но служба не читает сообщения до понедельника, так что база данных получает все обновления в понедельник?

Я начал смотреть на создание собственного хоста, но я не уверен, что с этим иду в правильном направлении.

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 29 марта 2010

Вы можете написать что-то вроде этого.

If Date.Now.DayOfWeek = DayOfWeek.Sunday Then
 <Store it in a List(Of <MyClass>) > 
ElseIf Not <List(Of <MyClass>)> is Nothing Then
 <Call update Db function passing <List(Of <MyClass>)> and clear <List(Of <MyClass>)>)
End If

Так что, если это воскресенье, вы просто будете хранить сообщения, а если нет, то обновите БД сохраненными сообщениями и очистите это хранилище.

0 голосов
/ 09 апреля 2010

Чтобы наконец-то получить работающее решение, я развернул свой собственный IInputChannel (который переопределил методы WaitForMessage и BeginWaitForMessage, чтобы они возвращали False, скажем, в воскресенье), чтобы канал не мог принимать никаких сообщений, я также создал Новый слушатель канала для реализации пользовательского канала, а затем создал новый обязательный элемент для слушателя канала.

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

Основы сервиса исчерпаны, и теперь у меня есть рабочая концепция, которую можно продолжить.

0 голосов
/ 30 марта 2010

Я собираюсь в основном репостить ответ @ hgulyan с логикой, которую, я полагаю, вы хотите:

If Date.Now.DayOfWeek = DayOfWeek.Sunday Then
 ' Do nothing, it is Sunday and I don't want to process anything. 
Else
 ' Call function that processes messages in MSMQ
End If

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

0 голосов
/ 29 марта 2010

Это действительно ничто, с чем WCF может вам помочь - это логика вашего приложения.

Если вы не хотите принимать какие-либо сообщения в воскресенье - отключите службу Windows по воскресеньям. Для этого вы можете использовать запланированное задание, например, выключите его в субботу 23:59:59 и снова включите в понедельник утром или что-то в этом роде.

Или обработайте это в своем коде - если это воскресенье, не обрабатывайте никаких сообщений.

Это действительно не имеет никакого отношения к WCF, я бы сказал. В WCF нет ничего, что позволяло бы вам «отключать» или скрывать службу WCF на определенный период времени.

...