[Ajax] optimisation des requêtes vers un WebService ASP.net Ajax - utilisation du cache client via UseHttpGet
ASP.net Ajax permet facilement de faire des requêtes Ajax vers un WebService ASP.net. Pour cela il suffit de rajouter l'attribut ScriptService au niveau du WebService et ScriptMethod au niveau de la WebMethod:
[WebService(Namespace = "http://tempuri.org/")]
[ScriptService]
public class MonWS : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod]
public string HelloWorld(String name)
{
return "Hello " + name;
}
}
Ensuite il faut faire une référence à ce WebService dans le ScriptManager :
<asp:ScriptManager runat="server" >
<Services>
<asp:ServiceReference Path="MonWS.asmx" />
</Services>
</asp:ScriptManager>
L'ajout de la référence va client un proxy en JavaScript, on peut donc appeler la méthode HelloWorld de la sorte :
window.pageLoad = function(){
var divResult = $get('divResult');
$get('btnStart').onclick = function(){
MonWS.HelloWorld('Cyril', function(value){
divResult.innerHTML = value;
});
}
}
Lorsque l'on cliquera sur notre bouton, une requête XMLHttpRequest est lancée. Mais si l'on regarde le détail de cette requête on voit que la méthode POST est utilisée. Le problème de cette méthode est que le navigateur ne peut pas mettre la réponse en cache. Il est possible d'utiliser la méthode GET en le spécifiant à notre WebMethod, le navigateur pourra alors mettre en cache la réponse, il faut mettre la propriété UseHttpGet à true au niveau de l'attribut ScriptMethod :
[WebMethod]
[ScriptMethod(UseHttpGet=true)]
public string HelloWorld(String name)
{
return "Hello " + name;
}
Avec cette modification, le navigateur fera qu'une seule fois la requête avec le même nom. Mais attention l'url d'une requête est limité à 2ko, s'il est possible que vous passez de nombreux paramètres à votre WebMethod alors il vous sera nécessaire d'utiliser la méthode POST. C'est pour cette raison que la méthode POST est utilisé par défaut.