Служба WCF в очереди, которая обрабатывает каждые X секунд - PullRequest
2 голосов
/ 07 апреля 2010

Мне нужно создать сервис, который может обрабатывать запросы в очереди в заданный интервал времени. Например, зайдите в Интернет и получите финансовые данные с сайта, требования которого мы ограничиваем раз в секунду. Я новичок в WCF, и я не уверен, является ли (1) WCF с MSMQ правильным выбором для реализации этого? и (2) если так, каков наилучший механизм для обеспечения соблюдения интервала? нить ждать? таймер (не уверен, как это будет работать).

Ответы [ 3 ]

2 голосов
/ 08 апреля 2010

WCF и MSMQ - отличная команда!Определенно стоит проверить.

Часть, которую WCF не предоставляет «из коробки» - это «проверять каждые x секунд».Наилучшим подходом здесь будет размещение службы WCF внутри службы Windows NT и наличие таймера внутри службы NT, который отправляется на проверку очереди MSMQ только один раз каждые x секунд.Не должно быть слишком сложно для реализации, на самом деле.Прелесть в том, что вы можете очень легко самостоятельно разместить Службу WCF внутри Службы NT - всего несколько строк кода, и вы получите полный контроль над тем, что происходит и когда.Подробности см. В документации MSDN по Как разместить службу WCF в управляемом приложении .

Ресурсы:

2 голосов
/ 07 апреля 2010

В WCF нет ничего такого, что позволяло бы вам обрабатывать это явно, поэтому вам все равно придется делать всю работу самостоятельно.

Хотя ваша служба может обрабатывать запросы от MSMQ, прослушиватели MSMQ в WCF будут выбирать и обрабатывать сообщения как можно скорее; вы не можете настроить их так, чтобы они обрабатывали сообщения только каждые X секунд (вы могли бы подделать их, если бы использовали правильные инструменты, но мне кажется, это было бы не так уж и здорово).

Один из вариантов, если ваша задержка между обработкой запросов не очень мала, это использовать промежуточную очередь для хранения ожидающих запросов. То есть все, что отправляет реальные запросы, записывает их в очередь, которую никто непосредственно не слушает (очередь A), в то время как ваша служба WCF прослушивает другую очередь (очередь B). Затем, есть что-то еще (может быть так же просто, как скрипт, запускаемый из планировщика задач), которое запускается один раз каждые X секунд / минут / что угодно и перемещает всего 1 сообщение из очереди A в очередь B, таким образом запуская фактическую службу WCF. 1005 *

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

Или вы можете просто использовать службу окна, чтобы получать сообщения вместо этого. Если вы не используете функциональность WCF для использования сообщения сразу после его публикации, то у вас, вероятно, нет причин использовать wcf в первую очередь

...