2010-10-06 11 views
11

Ich habe im Internet nach der Lösung dieses Fehlers gesucht, aber alles, was ich gefunden habe, schlägt vor, was ich habe, ist richtig.IMetaDataExchange konnte nicht in der Liste der durch den Dienst implementierten Verträge gefunden werden

Vielleicht könnte jemand einen Blick darauf werfen und einen offensichtlichen Fehler entdecken, den ich einfach nicht sehen kann.

Ich habe einen Windows-Dienst, Hosting zwei Verträge:

  1. IConfigurationService
  2. IConfigurationAdminService

Der Admin-Service vom Standard-Service erbt, wie ich beiden Verträge will die grundlegenden Methoden implementieren.

Das Problem ist, ich kann die Dienste in Ordnung, bis ich versuche und ein MEX hinzufügen.

Dann bekomme ich die folgende Ausnahme:

Der Vertrag Namen ‚IMetadataExchange‘ nicht in der Liste der Verträge durch den Dienst ‚ConfigurationWCFService‘ umgesetzt gefunden werden kann.

Und das ist meine Konfiguration, alles ist konfiguriert von Config, nichts durch Code getan.

<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> 

Antwort

12

Sie haben das Gehäuse nicht korrekt - die WCF-Konfiguration ist case-sensitive

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

Beachten Sie, dass die "D" nicht in IMetadataExchange aktiviert können Sie die doppelte syntax on MSDN überprüfen.

+0

Danke. Ich wusste, dass es etwas Einfaches sein musste !! COuld nicht den Wald für die Bäume sehen! Danke. – jimplode

2

Ich hoffe, die following link kann Ihnen die Hilfe bieten.

Und auch versuchen, das Hinzufügen der folgenden:

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

Markiert als die Frage bereits beantwortet worden war, und dies würde nicht funktionieren, da es das falsche Protokoll ist, verwende ich http, nicht net.tcp. – jimplode

+3

Da ich einen Eintrag für net.tcp in der Basisadresse sah, vermutete ich, dass Sie das auch verwenden. Zu der Zeit, als ich die Frage beantwortete, bekam ich auch keine Warnung über die Existenz einer anderen Antwort. Vielen Dank. –

6

ich NetTcpBinding für alle verwende. In meinem Fall hatte ich das gleiche Problem und gelöst durch Zugabe von:

(a) einem behaviourConfiguration = "" an dem mex Endpunkt

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

(b) ein behaviourConfiguration = "mex" in den Dienst Definition:

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

(c) Das Verhalten Eintrag

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