XXP

mai 2016

lun. mar. mer. jeu. ven. sam. dim.
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

« Exposer un service Web JSON en ASP.NET | Accueil | Exposer un service Web JSON en ASP.NET »

05 novembre 2007

Exposer un service Web JSON en ASP.NET

Quand un service Web retourne des objets au format JSON, ces objets sont directement exploitables en JavaScript. C'est une façon productive (mais quick  & dirty ?) d'amener les objets métiers du serveur au sein du client léger.

Mais les infos qui concernent la mise en œuvre d'un service Web au format JSON sont assez éparpillées et parfois incorrectes. On peut notamment lire ici ou là  qu'un service Web flanqué de l'attribut ScriptMethod se sérialise par défaut au format JSON, ce que l'expérience ne confirme pas.

Voici la recette (qui suppose qu'ASP.NET Ajax est installé sur le serveur et correctement configuré) :

  1. Ajouter l'attribut ScriptMethod devant la classe de service;
  2. Spécifier que le binding ne se conforme à aucun profil WS-I via l'attribut WebServiceBinding;
  3. Devant les méthodes de services, ajouter les attributs WebMethod et ScriptMethod, en spécifiant en paramètre JSON en format de réponse et le cas échéant en autorisant la commande http GET;
  4. Dans le fichier de config de l'application Web, autoriser les "protocoles" httpget et httppost qui ne sont autorisés par défaut (seul HttpSOAP l'est).

Soit au total :

[WebService(Namespace = "http://www.denisdollfus.com/WebServices", Description = "JSON Web service")]
[WebServiceBinding(ConformsTo = WsiProfiles.None)]
[ScriptService]
public class JsonServices : System.Web.Services.WebService
{
    public JsonServices()
    {}
 
    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet=true)]
    public SerializableOrder[] GetTopOrders()
    {
        DataAccessLayer l_dal = new DataAccessLayer();
        return l_dal.GetTopOrders();
    }
}

Et dans le fichier .config, sous <system.web> :

<webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>

A raffiner en fonction des besoins bien sûr.

Plus d'infos :

 

TrackBack

URL TrackBack de cette note:
https://www.typepad.com/services/trackback/6a00d8341c871f53ef00e54f8db8a88834

Listed below are links to weblogs that reference Exposer un service Web JSON en ASP.NET:

Commentaires

L'utilisation des commentaires est désactivée pour cette note.