Magazine Internet

[WCF] Forcer des réponses JSon, même pour des requêtes XML

Publié le 30 mai 2015 par Jeremy.jeanson

Par défaut WCF, permets de créer des services REST qui acceptent de fonctionner avec des corps de messages en JSon et en XML. La technologie est assez intelligente pour savoir qu’il faut répondre du XML à un client qui a formulé sa requête en XML et en JSon pour le client qui a communiqué du JSon.

Seul petit hic, par moment on aimerait prendre la main sur le processus et n’autoriser qu’un format d’échange. Si on tente de jouer sur les méthodes de nos services avec les attributs WebInvoke, on se retrouve avec une grosse masse de travail le jour où l’on veut changer d’approche. Et surtout, on ne peut pas être certain de vraiment forcer le service à répondre de la manière attendue (la configuration peut toujours prendre le dessus).

Pour forcer le format des messages, la solution se trouve donc dans la configuration :

<protocolMapping>
   <add scheme="http" binding="webHttpBinding" />
</protocolMapping>
    
<behaviors>
   <endpointBehaviors>
     <behavior>
       <webHttp defaultBodyStyle="WrappedRequest"
         defaultOutgoingResponseFormat="Json"
         automaticFormatSelectionEnabled="false" />    
     </behavior>
   </endpointBehaviors>
   <serviceBehaviors>
     <behavior>
       <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" />
       <serviceDebug includeExceptionDetailInFaults="false" />
     </behavior>
   </serviceBehaviors>
</behaviors>

Le choix de la réponse est interdit du fait du “false” dans “automaticFormatSelectionEnabled”. Le format du corps de la réponse est fixé par le “defaultOutgoingResponseFormat” qui apour valuer “Json”.

Seul petit hic. Si le client vous interroge en XML, la réponse JSON risque de déstabiliser votre navigateur qui n’acceptera peut-être pas le message ou qui vous ouvrira une boite de dialogue pour vous proposer d’enregistrer la réponse dans un fichier JSon. Heureusement, une solution existe : il faut modifier le ContentType de la réponse pour lui dire qu’il s’agit d’un text (text/plain). Le navigateur n’y verra que du feu et votre client pourra lire la réponse.

En général, les services qui seront concernés seront rares. Il s’agit souvent de services de gestion ou d’upload de fichier. Pour  ceux-ci, il suffit d’inclure le code suivant dans les méthodes du service :

 WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";

Bien sûr, si tous vos services sont concernés, il serait peut-être plus simple d’utiliser ce code dans un behavior WCF.


Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

  • Power BI: 15 erreurs courantes chez les débutants (2 de 3)

    Power erreurs courantes chez débutants

    J’ai été la première à offrir des formations Power BI à Montréal (et longtemps la seule), de sorte que j’ai formé un nombre impressionnant d’usagers. Lire la suite

    Le 17 août 2018 par   Sopmar01
    INFORMATIQUE, LOGICIELS, ORDINATEURS
  • Spéculoos recette maison au thermomix

    Spéculoos recette maison thermomix

    , un délicieux biscuit pour votre gouter. facile à préparer chez vous, voila la recette du biscuit Spéculoos au thermomix. INGRÉDIENTS : 250 g de farine 150 g d... Lire la suite

    Le 17 août 2018 par   Nicole Michelin
    CUISINE, RECETTES
  • Tarte aux prunes avec Thermomix

    Parce que c’est le moment de l’année où on aime se faire plaisir, et en cuisine c’est dessert et cocktail, nous vous présentons la recette de la tarte aux prune... Lire la suite

    Le 17 août 2018 par   Sabine91
    CUISINE, RECETTES
  • Mug Cake Chocolat Coulant au thermomix

    Cake Chocolat Coulant thermomix

    , un délicieux dessert de chocolat pour vous. facile à préparer chez vous, voila la recette de ce mug chocolat au thermomix. INGRÉDIENTS : 65 g farine 40 g caca... Lire la suite

    Le 17 août 2018 par   Nicole Michelin
    CUISINE, RECETTES
  • Khalil, de Yasmina Khadra

    Khalil, Yasmina Khadra

    Les odieux attentats du vendredi 13 novembre 2015 à Paris resteront longtemps dans les mémoires. Le narrateur, Khalil, du dernier roman de Yasmina Khadra,... Lire la suite

    Le 17 août 2018 par   Francisrichard
    SOCIÉTÉ
  • Mug Cake Oreo au thermomix

    Cake Oreo thermomix

    , un délicieux dessert de crème oreo pour vous. facile à préparer chez vous, voila la recette de ce mug oreo au thermomix. INGRÉDIENTS : 4 c.à.s de farine 2... Lire la suite

    Le 17 août 2018 par   Nicole Michelin
    CUISINE, RECETTES
  • Une voix de Dragon Ball et Cowboy Bebop s’est éteinte

    voix Dragon Ball Cowboy Bebop s’est éteinte

    Triste nouvelle pour les fans d’anime… Selon le site japonais Natalie (via DBS France), Unsho Ishizuka, doubleur de Mr. Satan dans Dragon Ball Kai et... Lire la suite

    Le 17 août 2018 par   Linfotoutcourt
    CULTURE

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte