Skip to main content

[WCF] Les bases d’une configuration clean

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>
Jérémy Jeanson

Comments

You have to be logged in to comment this post.

Cookies Cookie Policy

This website uses cookies to allow us to enhance your browsing experience (accessibility settings). If you continue to use this website you agree to our use of cookies.