2010-05-17 3 views
1

Lors de l'hébergement de mon service WCF appelé "SimpleWCF" sur IIS; J'obtiens l'erreur suivante en la parcourant manuellement dans mon navigateur; Le nom de contrat 'IMetadataExchange' n'a pas pu être trouvé dans la liste des contrats implémentés par le service SimpleWCF. Ajoutez un ServiceMetadataBehavior au fichier de configuration ou au ServiceHost directement pour activer la prise en charge de ce contrat.Erreur de métadonnées - WCF


Je ne comprends pas la cause de cette erreur [encore nouveau].
Voici mon fichier de configuration;

<configuration> 
    <system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
    <behavior name=""> 
    <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <basicHttpBinding> 
    <binding name="LargeData" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/> 
     <security mode="None"> 
     </security> 
    </binding> 
    </basicHttpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
<services> 
    <service name="SimpleWCF"> 
    <endpoint address="http://localhost/Sample/SimpleWCF.svc" binding="basicHttpBinding" bindingConfiguration="LargeData" contract="SimpleWCF"/> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
    </system.serviceModel> 
    <system.web> 
<compilation debug="true"/> 
    </system.web> 
</configuration> 

Répondre

2

Dans votre config, vous devez donner valide les noms à vos comportements!

<behaviors> 
    <endpointBehaviors> 
    <behavior name="webBehavior"> 
    <webHttp /> 
    </behavior> 
    </endpointBehaviors> 
    <serviceBehaviors> 
    <behavior name="serviceBehavior"> 
     <serviceMetadata httpGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

et les de votre balise <service>, vous devez référence que le comportement:

<service name="SimpleWCF" behaviorConfiguration="serviceBehavior"> 

pour qu'il devienne actif.

Si vous êtes sur .NET 4/WCF 4, vous pouvez également définir des comportements par défaut - mais vous devez laisser entièrement à l'attribut name=:

Maintenant, chaque point d'extrémité obtenir que le comportement de point de terminaison et chaque service obtiendra le comportement du service.

+0

(+1) Vous êtes la marque de l'homme. J'avais le même problème jusqu'à ce que j'ai enlevé l'attribut de nom tous ensemble. – capdragon