Служба WCF в очереди, которая обрабатывается каждые X секунд

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


person Jeff Windsor    schedule 07.04.2010    source источник


Ответы (3)


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

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

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

person tomasr    schedule 07.04.2010

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

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

Ресурсы:

person marc_s    schedule 08.04.2010

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

person shake    schedule 07.04.2010