Использование служб Windows для обработки сообщений MSMQ через WCF
У нас есть решение, в котором мы выбираем сообщения с помощью службы Windows.
Служба Windows запускается каждые 2 минуты и получает сообщение MSMQ для передачи его веб-службе.
- Могу ли я создать службу WCF, которая будет автоматически получать сообщения из очереди MSMQ?
- Можно ли избежать службы Windows с помощью службы WCF, если она поддерживает автоматический вызов?
2 ответа
Q1: вы можете автоматически получать сообщения из MSMQ, вам нужно изучить привязку netmsmq, есть некоторые конструктивные соображения, о которых вы должны подумать, хотя, если вы привыкли к собственному MSMQ, вы знаете, что у вас есть возможность заглянуть в сообщения. Но когда вы используете WCF, вы теряете эту способность заглядывать. WCF будет перехватывать сообщения в MSMQ, и вы несете ответственность за синхронизацию службы WCF и приложения для просмотра. Вам также необходимо выяснить, нужны ли вам транзакционные или нетранзакционные очереди, и вам придется изменить свою привязку на основе этого.
Q2: Вам нужно будет разместить службу WCF в службе Windows или в IIS7. если вы размещаете в IIS7, изучите включение прослушивателя MSMQ WAS
Вот хорошая статья: http://blogs.msdn.com/tomholl/archive/2008/07/12/msmq-wcf-and-iis-getting-them-to-play-nice-part-1.aspx
Одним из способов передачи сообщений из MSMQ в вызов веб-службы является использование конечной точки службы netMsmqBinding и конечной точки клиента basicHttpBinding, которые поддерживают один и тот же контракт. Служба netMsmq автоматически извлекает сообщения из очереди и десериализует их в объект. В своей реализации службы netMsmq просто создайте экземпляр клиентского прокси basicHttp и просто вызовите тот же метод. В основном шаблон передачи или прокси от веб-службы к MSMQ и наоборот. В "Программировании WCF" Джувала Лоуи он называет этот паттерн "HTTP Bridge" для очередей.