Использование WCF для отправки непосредственно в очереди MSMQ

StackOverflow https://stackoverflow.com/questions/4504108

  •  12-10-2019
  •  | 
  •  

Вопрос

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

Любая помощь ценится,

Майк

Это было полезно?

Решение 2

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

Другие советы

Я получаю это правильно - вы хотите иметь

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top