none
Problème de web.config en framework 4.0 RRS feed

  • Question

  • Bonjour,

    J'ai un problème étrange avec un projet de type "web site" hébergeant un service WCF. Je suis sous Visual Studio 2010.

    Lorsque je le crée en ciblant vers le framework 3.5, le web.config généré contient la définition du service, du endpoint et du behavior dans la rubrique <system.serviceModel>.

    Si je fais strictement la même chose mais en ciblant vers le framework 4.0, le web.config généré ne contient plus aucune définition du service

     

    En framework 3.5 j'ai ça

     <system.serviceModel>
      <services>
       <service name="Service" behaviorConfiguration="ServiceBehavior">
        <!-- Service Endpoints -->
        <endpoint address="" binding="wsHttpBinding" contract="IService">
         <!--
           Upon deployment, the following identity element should be removed or replaced to reflect the 
           identity under which the deployed service runs. If removed, WCF will infer an appropriate identity 
           automatically.
         -->
         <identity>
          <dns value="localhost"/>
         </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
       </service>
      </services>
      <behaviors>
       <serviceBehaviors>
        <behavior name="ServiceBehavior">
         <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
         <serviceMetadata httpGetEnabled="true"/>
         <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
         <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
       </serviceBehaviors>
      </behaviors>
     </system.serviceModel>

     

    En framework 4.0 j'ai ça

     

    <system.serviceModel>
     <behaviors>
      <serviceBehaviors>
      <behavior>
       <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
       <serviceMetadata httpGetEnabled="true"/>
       <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
       <serviceDebug includeExceptionDetailInFaults="false"/>
      </behavior>
      </serviceBehaviors>
     </behaviors>
     <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
     </system.serviceModel>
    

     

     

    Du coup, lorsque je souhaite utiliser le WCF configuration editor il me dit qu'il n'y a pas de service. Et bien entendu je ne peux pas le créer car il faut pointer vers l'assembly service.dll. Or, je suis en mode "web site" et je n'ai pas cette dll.

    Pour quoi cette différence de comportement entre le 3.5 et le 4.0 ?

     

    Comment faire pour résoudre mon problème?

     

    Merci

     

    jeudi 7 octobre 2010 15:02

Toutes les réponses

  • Bonjour cabrinha,

    Dans sa version 4, WCF cherche a simplifier autant que possible la configuration des services (et c'est une bonne chose) mais il est tout à fait possible de rester sur une configuration type WCF3. Ceci ne pose aucun problème.

    Par contre, il faut éviter de jongler autant entre les ciblages de Framework, sans quoi effectivement vous risquez d'avoir des surpises. Quand vous aurez choisi définitivement votre framework, i serra possible de configurer proprement vso services ;)

    Pour ce qui est du projet de type "Web site" je vous conseille vivement de faire des projets "application web". Ce genre de projet a de nombreux avantages et notemmment offre une meilleur intégration des outils tiers.


    Jérémy Jeanson MVP, MCP, MCTS http://blogs.codes-sources.com/JeremyJeanson/ (French or English spoken)
    mardi 12 octobre 2010 07:50
    Modérateur
  • Bonjour,

    avec le 4.0 le Web config est plus clean parcontre il y a un prix à payer c'est d'ajouter manuellement certaines ligne de codes , je trouve ça pas mal.

    Tu peux ajouter ces 2 lignes de config.

    Dans le noeu de ta balise service

    1 _ <endpoint name="udpDiscovery" kind="udpDiscoveryEndpoint" />

    Dans le noeu de ta balise behaviour

    2_ <serviceDebug includeExceptionDetailInFaults="false" /><serviceDiscovery/>  

    lundi 20 décembre 2010 13:26
  • Bonjour ,

    Normalement il  doit y avoir le endpoint pour la définition du contact du service.

    Cordioalment

    lundi 20 décembre 2010 13:28