Pergunta

Eu estou trabalhando em um projeto onde uma classe central (o assunto), irá conter um monte de dados. Haverá uma página aspx que exibe esses dados, usando .net ajax. Quando o assunto é atualizado a partir de qualquer página, eu quero todas as páginas abertas para atualização. Eu vou estar usando o padrão observador para isso. A pergunta é, posso fazer a página aspx real do observador, ou se existe uma maneira melhor de fazer isso?

Foi útil?

Solução

Um observador padrão não faz sentido neste caso.

A web (e ASP.NET) funciona por meio de pedidos (por exemplo, de um navegador web) e respostas (por exemplo, de um servidor web).

Um observador padrão exige que o assunto (por exemplo, um servidor web) mantém referências a ele de observadores (por exemplo, navegadores web) e actualizações de notificação empurra para eles. É evidente que esta não é aplicável a um cenário de servidor navegador web web.

Eu concordo com Sergio que o melhor método é provavelmente para fazer seus clientes (navegadores web) periodicamente verificar se há atualizações do (servidor web) de recursos. O método mais puro de fazer isso seria uma chamada de AJAX.

Um bom exemplo é o Gmail, novas mensagens aparecem na caixa de entrada logo depois que eles são recebidos no servidor sem que o usuário ter que fazer um pedido explícito. Isso é feito por chamadas AJAX que verificam periodicamente o servidor do Gmail para novas mensagens.

UPDATE (2012/03/01): -

Os desenvolvimentos recentes têm permitido a empurrar de dados do servidor web para o cliente para se tornar uma possibilidade mais realista, por exemplo, SignalR .

Outras dicas

Sergio é certo, e você também a uma extensão. A maneira mais fácil de implementar isso através Asp.Net AJAX está usando um controle timer AJAX, mas você certamente não quer duplicar esse em todas as suas páginas. Uma abordagem melhor seria para embrulhar essa funcionalidade se em uma página mestre, ou mesmo criar uma página de base que deriva da página.

Confira o href="http://msdn.microsoft.com/en-us/library/system.web.ui.timer.aspx" rel="nofollow noreferrer"> MSDN página e um de vídeo decente tutorial bem .

Como uma nota de lado em design, eu não necessariamente colocar o código observador real dentro de seu código por trás no entanto. Em vez disso, você deseja encaminhar esses eventos para algum modelo subjacente. A idéia é que seu código por trás é responsável apenas pela UI coisas relacionadas ea lógica para que isso aconteça. Essencialmente o V em MVP / MVP.

Além disso, eu não estou certo de quão bem o observador padrão "real" se aplica em um contexto web, considerando que você está falando de um único ciclo de HTTP Reponse / Request com nenhum estado real.

Eu não estou familiarizado com o observador padrão, mas a única maneira que você tem de fazer isso é colocar um loop infinito javascript no carregamento da página que cada X segundos invoca um método AJAX no servidor para verificar se há atualizações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top