шаблон наблюдателя asp.net - PullRequest
2 голосов
/ 05 января 2009

Я работаю над проектом, в котором центральный класс (субъект) будет содержать много данных. Будет страница aspx, которая отображает эти данные, используя .net ajax. Когда тема обновляется с любой страницы, я хочу обновить все открытые страницы. Я буду использовать шаблон наблюдателя для этого. Вопрос в том, могу ли я сделать реальную страницу aspx наблюдателем, или есть лучший способ сделать это?

Ответы [ 3 ]

6 голосов
/ 05 января 2009

Шаблон наблюдателя в этом случае не имеет смысла.

Сеть (и ASP.NET) работает посредством запросов (например, из веб-браузера) и ответов (например, с веб-сервера).

Шаблон наблюдателя требует, чтобы субъект (например, веб-сервер) сохранял ссылки на своих наблюдателей (например, веб-браузеры) и отправлял им обновления уведомлений. Очевидно, что это не применимо к сценарию веб-браузера и веб-сервера.

Я согласен с Sergio, что лучший способ, вероятно, состоит в том, чтобы ваши клиенты (веб-браузеры) периодически проверяли обновления ресурса (веб-сервера). Самый лучший способ сделать это - AJAX-вызов.

Хорошим примером является Gmail, новые сообщения появляются в папке «Входящие» вскоре после того, как они получены на сервере, и пользователю не нужно делать явный запрос. Это делается с помощью вызовов AJAX, которые периодически проверяют сервер Gmail на наличие новых сообщений.

ОБНОВЛЕНИЕ (2012.03.01): -

Недавние разработки позволили перенести данные с веб-сервера на клиент, чтобы стать более реалистичной возможностью, например. SignalR .

2 голосов
/ 05 января 2009

Серхио прав, как и вы в некоторой степени. Самый простой способ реализовать это через Asp.Net AJAX - использовать таймер AJAX, но вы, конечно, не хотите дублировать его на всех своих страницах. Лучшим подходом было бы заключить эту функциональность в главную страницу или даже создать базовую страницу, производную от Page.

Просмотрите страницу MSDN на элементе управления таймером , а также приличное видеоурок .

Как примечание к дизайну, я бы не стал помещать фактический код наблюдателя в ваш код. Скорее, вы хотите перенаправить эти события в некоторую базовую модель. Идея состоит в том, что ваш Code Behind отвечает только за связанные с UI вещи и логику, чтобы это произошло. По существу V в MVP / MVP.

Кроме того, я не уверен, насколько хорошо «фактический» шаблон наблюдателя применяется в веб-контексте, учитывая, что вы говорите об одном цикле ответа / запроса HTTP без реального состояния.

1 голос
/ 05 января 2009

Я не знаком с шаблоном наблюдателя, но единственный способ сделать это - поместить бесконечный цикл javascript при загрузке страницы, чтобы каждые X секунд вызывал на сервере метод AJAX для проверки обновлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...