2009-10-10 5 views
3

J'ai un service basique de wcf et quand je vais au wcfctestclient pour le tester, j'obtiens une erreur disant que les métadonnées ne peuvent pas être trouvées merci de l'ajouter etc. Malheureusement, le lien MSDN dans la popup est cassé et l'application de mon service WCF .config a métadonnées permis:Où activer les métadonnées (est activé dans la configuration)?

<serviceBehaviors> 
    <behavior name="TelerikWcfServices.Service1Behavior"> 
     <!-- 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> 

Autre que cela, je ne l'ai pas changé les paramètres de métadonnées nulle part ailleurs dans mon code.

Où puis-je activer les métadonnées pour corriger l'erreur?

Répondre

3

Vous devez ajouter un point de terminaison d'échange de métadonnées (MEX) à votre noeud de service. Essayez quelque chose comme ceci:

<endpoint 
    address="http://host/svc/mex" 
    binding="mexHttpBinding" 
    bindingConfiguration="" 
    contract="IMetadataExchange"/> 
+0

Mais alors cela change tout le point de terminaison? Je suppose que je ne peux pas utiliser les deux? Alors qu'est-ce que je fais quand j'ai besoin de l'une des autres liaisons? – dotnetdev

+0

En fait, vous pouvez utiliser les deux :) –

+0

J'ai essayé d'ajouter ce point de terminaison à mon nœud de service et il est toujours écrit "Le document HTML ne contient pas d'informations de découverte de service Web". – Justin

0

J'ai répondu à ma propre question car il est le seul moyen facile de montrer l'intégralité du fichier:

<client> 
    <endpoint address="http://localhost/Telerik" binding="basicHttpBinding" 
    bindingConfiguration="" contract="TelerikWcfServices.IScheduler" 
    name="Telerik"> 
    <identity> 
     <dns value="localhost" /> 
     <certificateReference storeName="My" storeLocation="LocalMachine" 
     x509FindType="FindBySubjectDistinguishedName" /> 
    </identity> 
    </endpoint> 
</client> 
<diagnostics> 
    <messageLogging logEntireMessage="true" /> 
</diagnostics> 
<services> 
    <service behaviorConfiguration="TelerikWcfServices.Service1Behavior" 
    name="TelerikWcfServices.IScheduler"> 
    <endpoint address="http://localhost/Telerik" binding="basicHttpBinding" 
     bindingConfiguration="" name="Telerik" contract="TelerikWcfServices.IScheduler"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:8731/Design_Time_Addresses/TelerikWcfServices/Service1/" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="TelerikWcfServices.Service1Behavior"> 
     <!-- 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> 

Merci pour votre aide!

1

Si vous utilisez Workflow 4.0 avec WorkflowServiceHost et que vous chargez votre service à partir d'une ressource xamlx, il ne reconnaîtra pas de balise WCB serviceBehavior avec un nom. Je ne sais pas pourquoi (ça me semble être un bug). Par exemple, cette balise de ci-dessus:

<serviceBehaviors> 
    <behavior name="TelerikWcfServices.Service1Behavior"> 
     <serviceMetadata httpGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
    </behavior> 
    </serviceBehaviors> 

aurait besoin de son attribut name éliminé comme ceci:

<serviceBehaviors> 
    <behavior> 
     <serviceMetadata httpGetEnabled="True"/> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
    </behavior> 
    </serviceBehaviors> 

et l'élément de service éliminerait la référence au nom de la configuration du comportement comme dans

<service 
    name="TelerikWcfServices.IScheduler"> 
    <endpoint address="http://localhost/Telerik" binding="basicHttpBinding" 
     bindingConfiguration="" name="Telerik"  contract="TelerikWcfServices.IScheduler">... 
Questions connexes