В большинстве, если не во всех примерах NSB для ASP.NET (или MVC), веб-приложение отправляет сообщение с использованием Bus.Send
и, возможно, регистрируется для простого обратного вызова, что по сути и является тем, как я использую его в своем приложении. .
Мне интересно, возможно ли и / или имеет ли смысл обрабатывать сообщений в одном и том же приложении ASP.NET.
Основная причина, по которой я спрашиваю, - кеширование . Процесс может идти примерно так:
- Пользователь инициирует запрос из веб-приложения.
- Веб-приложение отправляет сообщение на автономный сервер приложений и регистрирует изменения в локальной базе данных.
- При последующих запросах страниц от того же пользователя веб-приложение знает об изменении и выводит его в состояние «ожидания».
- На сервере происходит куча вещей, и в конечном итоге запросы принимаются или отклоняются. Событие публикуется со ссылкой на исходный запрос.
- На этом этапе веб-приложение должно начать отображение самой последней информации.
Теперь, в реальном веб-приложении почти наверняка кэшируется этот ожидающий запрос, вполне возможно, в течение длительного периода времени, потому что в противном случае приложение должно запросить базу данных для ожидающих изменений каждый раз пользователь запрашивает текущую информацию.
Поэтому, когда запрос, наконец, завершается на бэкэнде - что может занять минуту или день - веб-приложению необходимо как минимум аннулировать эту запись в кэше и выполнить другой поиск в БД.
Теперь я понимаю, что этим можно управлять с помощью SqlDependency
объектов и т. Д., Но давайте предположим, что они недоступны - возможно, это не серверная часть SQL Server или, возможно, запрос текущей информации идет в сеть сервис, что угодно. Вопрос в том, как веб-приложение узнает об изменении статуса?
Если возможно , можно обрабатывать сообщения NServiceBus в приложении ASP.NET, каков контекст обработчика? Другими словами, контейнеру IoC придется внедрить кучу зависимостей, но какова их область применения? Все ли это выполняется в контексте HTTP-запроса? Или все должно быть статическим / одноэлементным для обработчика сообщений?
Есть ли лучший / рекомендуемый подход к решению проблемы такого типа?