Использование NServiceBus с Asp.Net MVC 2 - PullRequest
7 голосов
/ 08 сентября 2010

Есть ли способ использования NServiceBus с Asp.Net MVC 2?Я хочу отправить сообщение-запрос из приложения Asp.Net MVC2 в службу, которая обрабатывает сообщение и отвечает ответным сообщением.Есть ли способ сделать это четко?

Ответы [ 3 ]

18 голосов
/ 08 сентября 2010

Существует причина, по которой NServiceBus поддерживает регистрацию обратного вызова только для кодов состояния и целых чисел.Причина в том, что вы не должны использовать NServiceBus для синхронизации запросов / ответов в стиле, эти сценарии лучше всего решать с такими фреймворками, как Wcf, NNibernate, EF, Ado.net и т. Д.

Вы должны смотреть только на использование NSBдля асинхронных частей вашего приложения, таких как отправка «команд» бэкэнд-сервисам для обработки.

Подробное объяснение можно найти здесь:

http://andreasohlund.net/2010/04/22/messaging-shouldnt-be-used-for-queries

Если вы все еще хотите сделать запрос / ответ в NSB, вам придется поработать для него:) использовать обработчик сообщений для вашего ответа, который обновляет некоторый кеш в вашем приложении MVC.Имея это в виду, вы можете выполнить опрос в стиле ajax, чтобы определить, когда поступят данные.

Надеюсь, это поможет!

14 голосов
/ 09 сентября 2010

Если вы действительно хотите сделать это, вот как:

var sync = Bus.Send<SomeMessage>(/*data*/)
    .Register((AsyncCallback)delegate(IAsyncResult ar) {
        var result = ar.AsyncState as CompletionResult;

        // do something with result.Messages
    },
    null
);

sync.AsyncWaitHandle.WaitOne(/*timeout*/);
0 голосов
/ 09 сентября 2010

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

...