Использование WCF Для отправки напрямую в очереди MSMQ - PullRequest
1 голос
/ 22 декабря 2010

У меня есть служба Windows, которая принимает сообщения от различных MSMQ. Служба забирает сообщения из очередей, а затем выполняет определенный рабочий процесс на основе очереди, из которой пришло сообщение. Можно ли настроить службу WCF так, чтобы она принимала сообщение от конечной точки и помещала его в очередь? Я хотел бы, чтобы служба имела несколько конечных точек, и в зависимости от того, какая конечная точка получила сообщение, сообщение будет помещено в другую очередь. Я видел кое-что о netMsmqBinding, но до сих пор не смог определить, предназначено ли это для использования, о котором я думаю.

Любая помощь приветствуется,

Mike

Ответы [ 3 ]

1 голос
/ 22 декабря 2010

Правильно ли я понимаю - вы хотите иметь

  • служба WCF, доступная внешнему миру с использованием нескольких конечных точек
  • в зависимости от того, с какой конечной точки сообщение поступает в службу WCF, оно должно помещать эти сообщения в отдельные очереди MSMQ?

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

Я вижу несколько подходов к этому:

  • имеют несколько служб, по одной для каждой (типа) конечной точки; они могут совместно использовать весь свой код и все, но если вы разделите это на отдельные классы обслуживания, то каждый класс обслуживания будет по своей природе знать , какую конечную точку он обслуживает, и, таким образом, может знать, в какую очередь MSMQ поместить информацию в

  • найти способ отправить некоторую информацию заголовка вместе с сообщением, которое как-то говорит вам, куда поместить сообщения

  • в WCF 4.0 вы, возможно, сможете что-то сделать с новой службой маршрутизации WCF ... но не совсем уверены, как это будет работать, однако - поскольку для этого также потребуется некоторая «подсказка», чтобы знать, в какую конечную точку он был вызван и как маршрутизировать входящее сообщение

0 голосов
/ 28 февраля 2011

Привязки net.msmq позволяют клиенту WCF выполнять прямую запись в очередь MSMQ, даже если служба WCF для чтения очереди не является активной - она ​​даже не должна существовать. Привязки net.msmq также позволяют автоматическое чтение из очередей. Нельзя использовать MessageQueue для записи или чтения из очереди.

0 голосов
/ 29 декабря 2010

Я смог сделать это, создав собственный класс ServiceHost, которому я мог бы передать имя конфигурации.Это альтернатива реализации по умолчанию, которая использует имя типа реализации службы для определения местоположения конфигурации.Это позволило мне запустить несколько экземпляров одной и той же реализации на одной машине.В дополнение к этому, внутри пользовательского класса обслуживания я добавил собственный MessageInspector, который присоединялся бы к каждой конечной точке для прослушивания сообщений.Затем я использую метод IDispatchMessageInspector.AfterReceiveRequest (), чтобы принять входящее сообщение, а затем поместить его в очередь, которую я определяю в своей конфигурации.Немного сложно, но это отлично работает для нашего сценария.

...