Как вы уже определили, вы можете периодически опрашивать, используя AJAX, чтобы узнать, нужно ли вам обновить. Если это не звучит хорошо, вы можете попробовать подход COMET, который включает в себя открытие запроса, который и клиент, и сервер остаются открытыми, пока на сервере не появится сообщение. В это время он отправит сообщение с любыми инструкциями, которые вы пожелаете (например, перезагрузите эту страницу) и завершит соединение, где клиентский скрипт затем что-то сделает с этим сообщением. Практическим примером этого является то, как Facebook обрабатывает уведомления. В результате ваш сервер получает меньше трафика, а пользователи получают волшебный «мгновенный» ответ от клиента. С другой стороны, этот подход требует правильного построения и настройки на сервере и в вашем приложении, так как поддержание большого количества открытых соединений может создать проблемы.
Существуют некоторые модули ASP.NET для реализации решения COMET (и Signalr звучит как одно из таких решений), но мне интересно, почему опция опроса настолько плоха, если вы используете ее только на Интранет. Вам не обязательно опрашивать в нескольких независимых областях вашего клиента; у вас мог бы быть один уведомитель (это все в JS, обратите внимание), который получает подписки от других компонентов, которые предоставляют информацию о том, что они хотят, чтобы вы проверяли. Затем выполните опрос AJAX для какого-либо действия MVC с сообщением, содержащим все соответствующие подписки. Я не представляю, что это большой сетевой бастер, так как у меня есть приложение, которое делает это в довольно большом масштабе.
На стороне сервера ваше действие будет анализировать это сообщение в заданиях, проверять каждое из них по запросу и отправлять ответное сообщение, если есть что сделать. Затем ваш клиентский уведомитель получает сообщение и отправляет результаты всем подписчикам, если есть что сделать (тривиальный пример: обновить страницу или, что более целесообразно, обновить раздел страницы, в котором есть изменения ... вы можете использовать JavaScript, предпочтительно через jQuery - для замены содержимого элемента на HTML, полученный из действия MVC для изменения содержимого).
Это может показаться сложным, но это не совсем так, особенно по сравнению с управлением решением COMET, и вы можете сделать это с помощью готовой технологии.
Упомянутая вами технология Silverlight звучит как использование дуплексного сервисного контракта WCF с использованием двойной HTTP-привязки , которая позволяет серверу инициировать запросы к клиенту. Это, безусловно, вариант, поскольку у вас может быть приложение для уведомлений Silverlight, подобное тому, что я упоминал ранее, сидеть на вашей странице, принимать подписчиков и получать push-сообщения с сервера. У меня не было возможности реализовать дуплексный сервис в реальном приложении, поэтому я не знаю, насколько это практично в производственной среде.