Magazine Internet

[WCF] Les bases d’une configuration clean

Publié le 11 avril 2015 par Jeremy.jeanson

Souvent, on me dit que WCF est compliqué à utiliser, à configurer, et qu’il faut toujours du code custom pour que cela marche. Connaissant bien la plateforme, j’aime que l’on me présente un cas concret quand on a ce genre de propos. À force de décortique ces cas, je me suis rendu compte que ce qui clochait le plus souvent était la configuration. Les possibilités de WCF étant parfois mal comprises, les développeurs configurent mal leurs services ou compensent avec du code personnel. Dans la plupart des cas, ce code ne fait que reproduire la configuration WCF en dure. Dans d’autres cas, ce code introduit des beahaviors ou des binding qui existent déjà.

La base de tout cela reste donc la connaissance de la configuration WCF. Entre celle-ci et IIS, les développeurs ont parfois du mal (voir mon précédent article sur IIS). Pour éviter tout écueil, je conseille de partir d’une configuration de base clean. Son objectif est de s’assurer que l’on n’hérite pas d’une autre configuration (via la topologie de IIS, et des applications qui seront en production sur le serveur).

On doit donc faire systématiques un clear des éléments de configuration suivant :

  • protocolMapping
  • serviceBehaviors
  • endpointBehaviors

Ce qui donne comme configuration de base ceci :

<system.serviceModel>
  <protocolMapping>
    <clear/>
  </protocolMapping>    
  <behaviors>
    <serviceBehaviors>
      <clear/>
    </serviceBehaviors>
    <endpointBehaviors>
      <clear/>
    </endpointBehaviors>
  </behaviors>
</system.serviceModel>

Si par exemple on reprend une configuration à la mode comme un REST, on a donc au final ceci :

<system.serviceModel>
  <protocolMapping>
    <clear/>
    <!-- Binding utilisé par le HTTPS -->
    <add scheme="https" binding="webHttpBinding"/>
  </protocolMapping>
    
  <bindings>
    <webHttpBinding>
      <clear/>
      <binding>
        <!-- Ajout du SSL -->
        <security mode="Transport"/>
      </binding>
    </webHttpBinding>
  </bindings>
    
  <behaviors>
    <serviceBehaviors>
      <clear/>
      <behavior>
        <!-- Suppression de meta-->
        <serviceMetadata httpsGetEnabled="false"/>
        <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
      <clear/>
      <behavior>
        <!-- Configuration REST -->
        <webHttp defaultBodyStyle="Bare" defaultOutgoingResponseFormat="Json"/>
      </behavior>
    </endpointBehaviors>
  </behaviors>
  <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

Retour à La Une de Logo Paperblog

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