Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Atteint de JavaScriptite Aiguë [Cyril Durand]

Expert ASP.net Ajax et WCF, Cyril Durand parle dans son blog de point techniques sur ASP.net, ASP.net Ajax, JavaScript, WCF et .net en général. Cyril est également consultant indépendant, n'hésitez pas à le contacter pour de l'assistance sur vos projets

Actualités

  • Blog de Cyril DURAND, passionné de JavaScript, Ajax, ASP.net et tout ce qui touche au developpement Web Client-Side.

    N'hésitez pas à me contacter pour vos projets .net : architecture, accompagnement, formation, ...

    View Cyril Durand's profile on LinkedIn
    hit counters


    Expertise Commerce server et BizTalk

[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.

Posted: jeudi 1 novembre 2007 11:35 par cyril
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

dapoussin a dit :

Bonjour Cyril,

Intéressant ce billet, merci :)

Par contre j'ai essayé d'appliquer cette attribut sur une méthode appelée par un AutoCompleteExtender. Le contrôle appelle toujours le web service en POST et ne tient pas compte du paramètre UseHttpGet.

Voilà la requête :

POST /xxx/WebServices/WsCode.asmx/GetCode HTTP/1.1

Accept: */*

Accept-Language: fr

Referer: http://xxx

Content-Type: application/json; charset=utf-8

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; InfoPath.2; .NET CLR 1.1.4322)

Host: ow38

Content-Length: 30

Proxy-Connection: Keep-Alive

Pragma: no-cache

Cookie: ASP.NET_SessionId=o3s2ni55o1vbyd55igiyjw55

{"prefixText":"ar","count":10}

Et la réponse :

HTTP/1.1 500 Internal Server Error

Cache-Control: private

Content-Length: 91

Content-Type: application/json

Server: Microsoft-IIS/7.0

X-AspNet-Version: 2.0.50727

jsonerror: true

X-Powered-By: ASP.NET

Date: Fri, 02 Nov 2007 09:42:21 GMT

{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}

Aurais-tu une idée pour utiliser du GET avec un AutoCompleteExtender ? Mettre en cache ces appels me serait très utile :)

Bye

Laurent

# novembre 2, 2007 10:51

cyril a dit :

Dans le cas de l'AutoCompleteExtender, le proxy n'est pas généré par l'appel à WS.asmx/js mais directement dans l'autocompletextender a moins de modifier l'autocompletextender, il n'est pas possible de lui dire de passer en GET :( (mais libre à toi de déclarer un bug :p)

Par contre il me semble que l'autoCompleteExtender gère du cache en js, tous les appels sont enregistré, du coup il ne refait pas les requêtes ... (à vérifier)

# novembre 2, 2007 11:11

Promesses a dit :

Il me semble que oui car il y a une propriété "EnableCache" sur l'autocompleteextender.

# janvier 25, 2008 00:06
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01