2011-01-12 4 views
0

У меня есть статическая библиотека классов, которую я использую для предоставления услуг для приложения ASP.NET MVC3.NServiceBus, используя статическую библиотеку классов

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

Я использую NServiceBus2, чтобы принять сообщение узла от веб-клиента. Затем управление отправляется обратно в веб-приложение, чтобы позволить контроллеру завершить работу и, следовательно, вернуть страницу пользователю.

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

Моя проблема публикуется. Должен ли я создавать шину при каждом вызове метода? Где я могу хранить автобус? Полагаю, я мог бы попробовать маршрут WCF?


Разъяснения

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

Похоже, вы используете NServiceBus неправильно. – Phill

+0

Любые мысли о том, почему Фил? Я просто хочу очередь msg, которая имеет все проводки, чтобы реагировать на сообщение, которое на нем. –

ответ

0

Существует несколько способов получить сообщения на шине из веб-приложения ASP.NET. Во-первых, вы можете загружать Bus один раз в глобальном месте (global.asax или иначе) и предоставлять ссылку на него. Мы предпочитаем ссылаться на шину через некоторую абстракцию, обычно такой класс, как ServiceAgent <T> где T - это сообщение, в котором вы будете внутренне Bus.Send(). Если вы не хотите расширять шину в своем веб-приложении, другой вариант заключается в том, чтобы вывести конечную точку NServiceBus в качестве службы WCF. Это делается просто путем реализации класса с помощью WcfService < TRequest, TResponse >. Оттуда вы можете просто вызвать выставленную службу SOAPy. Если вам не нравится SOAP, вы можете настроить конечную точку по-разному. В пределах вашей конечной точки вы можете сделать публикацию().

0

Вы создаете автобус за услугу. услугой может быть служба Windows, приложение win-forms или в вашем случае веб-сайт.
в сценарии веб-сайта/webservice Обычно я создаю шину в событии application_start для global.asax.

Вы можете сохранить автобус в контейнере, например StructureMap или Castle Windsor.

не публиковать сообщения с вашего сайта напрямую, а вместо этого вызывать службу wcf, которая публикует сообщение. или использовать отправку с вашего сайта. не торопитесь, чтобы понять различные способы обмена сообщениями с nservicebus. в частности различия в сценариях pub/sub и send/reply, когда нужно использовать то, что необходимо.

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

Смежные вопросы