Pergunta

Estou prestes a iniciar um recurso bastante pesado em Ajax no aplicativo da minha empresa.O que preciso fazer é fazer um retorno de chamada do Ajax a cada poucos minutos em que um usuário estiver na página.

  • Não preciso fazer nenhuma atualização do DOM antes, depois ou durante os retornos de chamada.
  • Não preciso de nenhuma informação da página, apenas de um cookie do site que sempre deve ser enviado com solicitações de qualquer maneira, e um valor de ID.

O que estou curioso para descobrir é se existe alguma maneira limpa e simples de fazer um retorno de chamada JavaScript Ajax para uma página ASP.NET sem postar de volta o restante das informações na página.Eu gostaria de não ter que fazer isso, se for possível.

Eu realmente só quero poder chamar um único método na página, nada mais.

Além disso, estou restrito ao ASP.NET 2.0, portanto não posso usar nenhum dos novos recursos ASP AJAX da estrutura 3.5, embora possa usar as extensões ASP AJAX para a estrutura 2.0.

ATUALIZAR
Eu decidi aceitar DanPa resposta, pois parece ser exatamente o que estou procurando.Nosso site já usa jQuery para algumas coisas, então provavelmente usarei jQuery para fazer solicitações, pois, em minha experiência, ele parece ter um desempenho muito melhor do que o framework AJAX do ASP.

Qual você acha que seria o melhor método de transferência de dados para o IHttpHandler?Devo adicionar variáveis ​​à string de consulta ou POST os dados que preciso enviar?

A única coisa que acho que preciso enviar é um único ID, mas não consigo decidir qual é o melhor método para enviar o ID e fazer com que o IHttpHandler cuide disso.Eu gostaria de encontrar uma solução que evitasse que uma pessoa com conhecimentos básicos de informática acessasse acidentalmente ou intencionalmente a página diretamente ou repetisse solicitações.Isso é possível?

Foi útil?

Solução

Se não quiser criar uma página em branco, você pode chamar um arquivo IHttpHandler (ashx):

public class RSSHandler : IHttpHandler
    {
        public void ProcessRequest (HttpContext context)
        {   
            context.Response.ContentType = "text/xml";

            string sXml = BuildXMLString(); //not showing this function, 
            //but it creates the XML string
            context.Response.Write( sXml );
        }

        public bool IsReusable
        {
            get { return true; }
        }

    }

Outras dicas

Você deve usar retornos de chamada do ASP.Net que foram introduzidos no Asp.Net 2.0.Aqui está um artigo que deve ajudá-lo a começar:

Implementando retornos de chamada de cliente programaticamente sem postbacks em páginas da Web ASP.NET

Editar:Veja também isto:Serialização JavaScript baseada em ICallback e JSON

Qual você acha que seria o melhor método de transferência de dados para o IHttpHandler?Devo adicionar variáveis ​​à string de consulta ou POST os dados que preciso enviar?A única coisa que acho que preciso enviar é um único ID, mas não consigo decidir qual é o melhor método para enviar o ID e fazer com que o IHttpHandler cuide disso.Eu gostaria de encontrar uma solução que evitasse que uma pessoa com conhecimentos básicos de informática acessasse acidentalmente ou intencionalmente a página diretamente

Considerando que o retorno de chamada está oculto no código do cliente, seria necessário alguém com igual determinação para obter a string de consulta ou a solicitação POST.Ou seja, se eles tiverem firebug, você estará igualmente ferrado.

Então, nesse caso, faça o que for mais fácil para você (Dica:Eu apenas usaria a string de consulta).

Para lidar com solicitações repetidas/acesso direto, eu geraria uma chave que é enviada com cada solicitação.Talvez um hash da hora atual (Fuzzy, eu diminuiria para minutos, mas não segundos devido à latência da rede) + o IP do cliente.

Em seguida, no HTTPHandler, execute o mesmo hash e execute apenas se eles corresponderem.

Você não está restrito apenas ao ASP.NET AJAX, mas pode usar qualquer biblioteca de terceiros, como jQuery, YUI etc., para fazer a mesma coisa.Você pode então simplesmente fazer uma solicitação para uma página em branco do seu site, que deve retornar os cabeçalhos que contêm os cookies.

Meu voto também é com a sugestão do HTTPHandler.Eu utilizo isso com frequência.Como não invoca uma instância da classe page, é muito leve.

Todos os truques da estrutura ASP.NET AJAX na verdade instanciam e criam a página inteira novamente no back-end por chamada, portanto, eles consomem muitos recursos.

Conseqüentemente, meu estilo típico de XmlHttpRequest volta para um HttpHandler.

Como você está usando apenas ASP.NET 2.0, eu recomendaria AjaxPro será o que criará o arquivo .ashx.Tudo que você precisa fazer é colocar o AjaxPro.dll em seu site.Desenvolvi uma aplicação inteira com AjaxPro e descobri que funcionou muito bem.Ele usa serialização para passar objetos de um lado para outro.

Este é apenas um exemplo de como usá-lo simplesmente.

namespace MyDemo
{
  public class Default
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      AjaxPro.Utility.RegisterTypeForAjax(typeof(Default));
    }

    [AjaxPro.AjaxMethod]
    public DateTime GetServerTime()
    {
      return DateTime.Now;
    }
  }
}

Para chamá-lo via JavaScript é tão simples quanto

function getServerTime()
{
  MyDemo._Default.GetServerTime(getServerTime_callback);  // asynchronous call
}

// This method will be called after the method has been executed
// and the result has been sent to the client.

function getServerTime_callback(res)
{
  alert(res.value);
}

EDITAR

Você também tem que adicionar

Para a configuração.AjaxPro também funciona bem lado a lado com APS.NET Ajax e você pode passar objetos C# do Cliente para o Servidor se a classe estiver marcada como [Serializable]

Apenas para oferecer uma perspectiva diferente, você também pode usar um PageMethod na sua página principal.Dave Ward tem uma postagem legal que ilustra esse.Essencialmente, você usa jQuery ajax post para chamar o método, conforme ilustrado na postagem de Dave:

$.ajax({
    type: "POST",
    url: "Default.aspx/GetFeedburnerItems",
    // Pass the "Count" parameter, via JSON object.
    data: "{'Count':'7'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      BuildTable(msg.d);
    }
  });

Não há necessidade de extensões Asp.Net Ajax.

Você também pode usar WebMethods que estão integrados à biblioteca asp.net ajax.Você simplesmente cria um método estático no codebehind da página e chama isso do seu Ajax.

Há um exemplo bem básico de como fazer isso aqui

Você deve usar um serviço web (.asmx).Com o ASP.NET AJAX da Microsoft você pode até gerar automaticamente os stubs.

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