использовать System.Messaging.MessageQueue или WCF для MSMQ? - PullRequest
4 голосов
/ 15 августа 2011

5 лет назад я разработал программу, которая использовала MSMQ.

Тогда я использовал System.Messaging.MessageQueue и System.Messaging.MessageQueueTransaction, чтобы поместить элементы в msmq.

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

Прежде всего, большинство примеров кода показывают только то, как поместить элементы в очередь с использованием WCF, а не получить OFF, но болееважно: когда я использую решение WCF / MSMQ, мне нужно создать дополнительный проект, а именно службу wcf.

Создание службы wcf, конечно, не проблема, но я также должен установить ее на производстве.

Поэтому мне интересно: почему я должен использовать wcf для помещения элементов в очередь, а не решение с объектами .Net?

Или я ошибаюсь, что я предполагаю, что когда яиспользовать scf, что мне нужно приложение EXTRA для доставки, а именно приложение wcf?

РЕДАКТИРОВАТЬ: Scneario так: у нас есть веб-сайт, где люди могут отписаться.Вместо прямого обращения к базе данных (для отмены подписки) мы помещаем запрос на отмену подписки в очередь, а другая служба (служба Windows или консольное приложение) получает элементы из очереди и выполняет действия базы данных

Ответы [ 4 ]

5 голосов
/ 15 августа 2011

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

В вашем текущем решении есть веб-сайт, который помещает запрос в очередь, а служба Windows, которая получает запрос из очереди, затем обращается к базе данных. Это вполне приемлемо, если ты знаешь, что всегда будешь использовать MSMQ, аминь.

Однако, вы можете изменить его следующим образом:

  • Ваша служба Windows теперь размещает службу WCF (здесь не требуется никакого дополнительного проекта). Служба WCF предоставляет метод Unsubscribe (имя метода описывает логическое действие, а не способ его выполнения).
  • Ваш веб-сайт теперь действует как клиент WCF, который ссылается на службу (здесь не требуется никакого дополнительного проекта). Код веб-сайта вызывает метод Unsubscribe.
  • Вы настраиваете привязки WCF для использования MSMQ.

Если в будущем вы решите, что MSMQ не нужен, или подумаете о лучшем способе, вы можете просто изменить привязки WCF, чтобы использовать что-то другое, и код останется прежним.

2 голосов
/ 24 августа 2011

Недавно я уже сталкивался с подобным вопросом.Лично я никогда не хочу писать другое приложение в WCF.Он слишком сложный, и если вы неправильно установили конфигурацию или ее комбинации, вы можете часами пытаться найти выход из нее.Я только что написал простое приложение, которое извлекает из очереди многопоточным способом и выталкивает его из Интернета.Это может быть излишним для вас.Существуют простые примеры, которые помогут вам начать работу, например this .

1 голос
/ 15 августа 2011

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

Но, на ваш вопрос, поддержка WCM для MSMQ призвана обеспечить унифицированный способ обмена сообщениями для приложений.будь то через веб-сервисы, традиционные сервисы, COM + (что это?) или в очереди.

Если ваша очередь полностью находится в вашем приложении, то я не уверен, что это необходимо.

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

Если бы вы могли предоставить более подробную информацию о природе вашего приложения, я могу предоставить некоторые более подробные сведения.

1 голос
/ 15 августа 2011

Возможно, подумайте об этом так: MSMQ - это ресурс для обмена сообщениями, так же как SQL Server предназначен для хранения данных отношений.Приложения всех видов могут использовать этот сервис (консоль .NET, веб-сервис, и т. Д. И, конечно, другие продукты вендора MQ).

Бывает, что Microsoft тесно интегрировала MSMQ в WCF, и демонстрационные проекты показывают,Проблема с чтением + запись в очередь не является проблемой.Любой тип проекта может читать и писать в MSMQ одинаково.

...