Chamada ASP.NET AJAX síncrona

Novembro 2016



Introdução


Embora a sigla AJAX faça referência a uma chamada assíncrona (Asynchronous JavaScript and XML), em alguns casos, pode ser necessário usar toda a tecnologia encontrada atrás deste termo com um detalhezinho a parte, o fato de querermos fazer uma chamada síncrona.

Se o termo AJAX não colar com a função desejada, é possível nomear a nossa técnica SJAX (Synchronous JavaScript and XML).

Pré-requisitos


Nós partimos do princípio que nossos leitores têm um bom nível de conhecimento com a plataforma .NET e as tecnologias ASP.NET e AJAX. Além disso, note-se que nos baseamos em nosso exemplo sobre o Framework .NET 3.5 com o IDE Microsoft Visual Studio 2008.

Definições


Voltemos um pouco para o significado dos termos "AJAX assíncrona" e "AJAX síncrona"; sabendo que durante uma chamada de AJAX, o usuário da web não vê a atualização da página, mas percebe uma dinâmica refletindo uma comunicação com o servidor. Esta dinâmica tem a vantagem de permitir ao usuário continuar a explorar a sua página sem precisar esperar por respostas do servidor.

Suponhamos, agora, que temos um caso especial no qual devemos, obrigatoriamente, obter a resposta do servidor antes de liberar o processo do cliente. Isso pode ser o caso de uma "checkbox" que se quer controlar o valor no momento do clique e isso, em função de um tratamento do servidor. Para isso, devemos fazer uma chamada AJAX no momento do clique e aguardar a resposta do servidor, sem ajudar o usuário a efetuar outra ação, antes de fechar o evento. Em outras palavras, a chamada e a resposta ao servidor devem ser feitas dentro da mesma função em uma função, e não, defasado, como no caso da chamada assíncrona.

Técnicas


Claro, sempre se pode tentar explorar soluções de chamada AJAX síncronas, não previstas especificamente para uso com o ASP.NET, mas o problema é que corre-se o risco de perder a principal vantagem da simplicidade que nos oferece a plataforma com, além disso, o fato de ter que gerenciar o padrão de chamada dos serviços web em .NET.

Em suma, o que se propõe é mais uma técnica baseada na intercalação do executor do pedido da web, diferente do executável padrão, que administra as chamadas AJAX no ASP.NET. Nosso executável se chama "Sys.Net.XMLHttpSyncExecutor" e difere durante a sua operação com o ASP.NET, muito parecido com o que se faz normalmente com uma chamada AJAX assíncrona.

Exploração


Voltemos ao nosso exemplo de chamadas assíncronas "HelloWorld":

ApplicationWebAjax.ServiceWebAjax.HelloWorl(dataDaChamada, contadorDaChamada, HelloWorld_SucceededCallback, FailedCallback);


Neste caso, utilizamos a função "HelloWorld" com dois parâmetros e retornando uma mensagem sob a forma de uma cadeia de caracteres (string). A função pode se encontra no serviço web

"ApplicationWebAjax.ServiceWebAjax".

Se você quisermos que chamem o nosso serviço web de forma síncrona, é preciso proceder da seguinte maneira e isso, depois de se referir à classe JavaScript " Sys.Net.XMLHttpSyncExecutor" na nossa página web:

var defaultExecutorType = Sys.Net.WebRequestManager.get_defaultExecutorType(); 
Sys.Net.WebRequestManager.set_defaultExecutorType("Sys.Net.XMLHttpSyncExecutor"); 
var request = ApplicationWebAjax.ServiceWebAjax._staticInstance.HelloWorld(dataDaChamada, contadorDa Chamada); 
if (request._executor.get_responseAvailable()) { 
    var resultat = request._executor.get_object().d; 
} 
Sys.Net.WebRequestManager.set_defaultExecutorType(defaultExecutorType);


Note aqui, que intercalamos o nosso executável de chamada com o método "set_defaultExecutorType" e recuperamos no final da nossa operação o executável padrão, a fim de garantir que todas as eventuais chamadas subsequentes funcionem, corretamente, com o modo assíncrono.

Além disso, observamos que a leitura da resposta da função parece mais com bricolagem "request._executor.get_object().d " e, da mesma forma, é preciso passar por "_staticInstance" para chamar a função "HelloWorld".

Infelizmente, a técnica apresentada aqui normalmente não funciona em todas as versões de navegadores web, mas uma intervenção na classe JavaScript "XMLHttpSyncExecutor" poderia melhorar a solução.

A solução foi testada com várias versões do Internet Explorer e também com algumas versões menos recentes do Mozilla Firefox.

Conclusão


Mesmo se uma bricolagem das técnicas AJAX ASP.NET nos permite realizar uma chamada síncrona, é altamente desaconselhável praticar tais chamadas AJAX, exceto em casos extremos e, especialmente, com pedidos simples e rápidos não exigindo um tempo de ocupação importante. Saiba que, na verdade, o tempo de chamada da nossa página web seria bloqueado e inutilizável já que o navegador permanece ativo até o final da interpretação da sua função de chamada.




Tradução feita por Lucia Maurity y Nouira

Veja também :
Este documento, intitulado « Chamada ASP.NET AJAX síncrona »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.