2010-10-06 49 views
11

J'ai recherché sur le Web la résolution de cette erreur, mais tout ce que j'ai trouvé suggère ce que j'ai.IMetaDataExchange est introuvable dans la liste des contrats implémentés par le service

Peut-être que quelqu'un pourrait jeter un coup d'oeil et repérer une erreur évidente que je ne peux pas voir.

J'ai un service Windows, hébergement de deux contrats:

  1. IConfigurationService
  2. IConfigurationAdminService

Le service d'administration hérite du service standard que je veux les contrats à mettre en œuvre les méthodes de base.

Le problème est que je peux héberger les services très bien, jusqu'à ce que j'essaie d'ajouter un MEX.

Puis-je obtenir l'exception suivante:

Le n'a pas pu être trouvé le nom du contrat « IMetadataExchange » dans la liste des contrats mis en œuvre par le service « ConfigurationWCFService ».

Et ceci est ma config, tout est configuré par config, rien n'est fait par le code.

<system.serviceModel> 
    <bindings> 
     <netTcpBinding> 
     <binding name="tcpBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" /> 
      <security mode="None" /> 
     </binding> 
     </netTcpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFService"> 
     <endpoint address="ConfigurationService" binding="netTcpBinding" 
      bindingConfiguration="tcpBinding" name="tcpConfiguration" contract="BrightsideGroup.Repa.Configuration.IConfigurationWCFService" /> 
     <endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://GD01316:9123/Repa" /> 
      <add baseAddress="http://GD01316:8123/Repa" /> 
      </baseAddresses> 
     </host> 
     </service> 
     <service behaviorConfiguration="serviceBehavior" name="BrightsideGroup.Repa.Configuration.ConfigurationWCFAdminService"> 
     <endpoint address="ConfigurationAdminService" binding="netTcpBinding" 
      bindingConfiguration="tcpBinding" name="tcpConfigurationAdmin" 
      contract="BrightsideGroup.Repa.Configuration.IConfigurationAdminWCFService" /> 
     <endpoint binding="mexHttpBinding" address="mex" name="mex" contract="IMetaDataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="net.tcp://GD01316:9124/Repa" /> 
      <add baseAddress="http://GD01316:8124/Repa" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Répondre

12

Vous avez le boîtier incorrect - la configuration de WCF est sensible à la casse

<endpoint address="mex" 
       binding="mexHttpBinding" 
       contract="IMetadataExchange" /> 

Notez que le "D" ne sont pas capitalisées dans IMetadataExchange Vous pouvez vérifier la syntax on MSDN.

+0

Merci. Je savais que ça devait être quelque chose de simple !! Ne voit pas la forêt pour les arbres !! Je vous remercie. – jimplode

2

J'espère que le following link peut vous fournir l'aide.

Et aussi essayer d'ajouter les éléments suivants:

<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> 
+0

Marqué comme la question avait déjà été répondu, et cela ne fonctionnerait pas car c'est le mauvais protocole, j'utilise http, pas net.tcp. – jimplode

+3

Depuis que j'ai vu une entrée pour net.tcp dans l'adresse de base, je suppose que vous l'utilisez aussi. Aussi, au moment où j'ai répondu à la question, je n'ai pas eu l'alerte sur l'existence d'une autre réponse. Je vous remercie. –

6

J'utilise NetTcpBinding pour tous. Dans mon cas, je faisais la même question et résolu en ajoutant:

(a) behaviourConfiguration = "" au point de terminaison MEX

<endpoint address="mex" 
      binding="mexTcpBinding" 
      contract="IMetadataExchange" 
      behaviourConfiguration="" /> 

(b) un behaviourConfiguration = "MEX" au service Définition:

<services> 
    <service name="AcmeService" behaviourConfiguration="mex"> 

(c) L'entrée du comportement

<behaviors> 
    <serviceBehaviors> 
     <behaviour name="mex"> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
      <serviceMetadata /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors>