Как использовать SignalR для реализации уведомлений в системе .NET 4.0, которая состоит из приложения ASP.NET MVC 3 (которое использует проверку подлинности с помощью форм), базы данных SQL Server 2008 и службы MSMQ WCF (размещенной в WAS) для обработкиданные?Среда выполнения состоит из IIS 7.5, работающего в Windows Server 2008 R2 Standard Edition.
Я играл только с семплами и не обладаю обширными знаниями о SignalR.
Вот немного фона
Веб-приложение принимает данные отпользователь и добавляет его в таблицу.Затем он вызывает одностороннюю операцию (с ключом базы данных) службы WCF для обработки данных (задача).Веб-приложение вернется на страницу, сообщающую пользователю, что данные были отправлены, и они будут уведомлены о завершении обработки.Пользователь может посмотреть на «индексную» страницу и увидеть, какие задачи выполнены, не выполнены или выполняются.Они могут продолжать отправлять больше задач (что не зависит от предыдущих данных).Они могут закрыть свой браузер и вернуться позже.
Служба WCF на основе MSMQ считывает запись из базы данных и обрабатывает данные.Это может занять от миллисекунд до нескольких минут.После завершения обработки данных запись обновляется с соответствующим состоянием (ошибка или сбой) и результаты.
Большую часть времени служба WCF не выполняет никакой обработки, однако, когда это происходит, пользователи обычнохочу знать, когда это будет сделано как можно скорее.Пользователь по-прежнему будет использовать другие части веб-приложения, даже если у них нет данных для обработки службой WCF.
Это то, что я сделал
На главной навигационной панели у меня есть индикатор (аналог Facebook или Google+), чтобы пользователь мог уведомить его об изменении статуса задач.Когда они нажимают на него, они получают сводку о том, что было сделано, и затем могут просмотреть результаты, если они хотят.
Используя jQuery, я опрашиваю сервер на предмет изменений.Действие контроллера проверяет, есть ли какие-либо процессы, которые были изменены (завершены или не выполнены), и возвращает их, в противном случае ждет пару секунд и проверяет снова, не возвращаясь к клиенту.Чтобы избежать тайм-аута на клиенте, он вернется через 30 секунд, если не было никаких изменений.Скрипт jQuery ждет некоторое время и пытается снова.
Проблемы
Производительность ухудшается у каждого пользователя, просматривающего страницу.Им не нужно ничего делать конкретно.Мы заметили, что использование памяти Firefox 7+ и Safari со временем увеличивается.
Использование SignalR
Я надеюсь, что переход на SignalR может уменьшить опрос и, таким образом,снизить требования к ресурсам, особенно если в базе данных ничего не изменилось.У меня проблемы с получением службы WCF для уведомления клиентов о том, что она выполнена с обработкой задачи, учитывая тот факт, что она использует аутентификацию на основе форм.
Задавая этот вопрос, я надеюсь, что кто-то даст мне более полное представление о том, как они будут перепроектировать мою схему уведомлений с использованием SignalR, если вообще будут.