2010-10-06 10 views
11

Ho cercato sul web la risoluzione di questo errore, ma tutto ciò che ho trovato suggerisce che cosa ho è corretto.Impossibile trovare IMetaDataExchange nell'elenco dei contratti implementati dal servizio

Forse qualcuno potrebbe dare un'occhiata e individuare un errore evidente che proprio non riesco a vedere.

Ho un servizio di Windows, che ospita due contratti:

  1. IConfigurationService
  2. IConfigurationAdminService

il Servizio di amministrazione eredita dal servizio standard come voglio entrambi i contratti di implementare i metodi di base.

Il problema è che posso ospitare i servizi fino a quando non provo ad aggiungere un MEX.

allora ottengo la seguente eccezione:

Il nome del contratto 'IMetaDataExchange' non è stato trovato nella lista dei contratti attuate dal servizio 'ConfigurationWCFService'.

E questa è la mia configurazione, tutto è configurato da config, niente fatto tramite il codice.

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

risposta

12

avete la carcassa non corretta - la configurazione WCF è

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

Si noti che la "D" non è in maiuscolo in IMetadataExchange È possibile controllare due volte il syntax on MSDN maiuscole e minuscole.

+0

Grazie. Sapevo che doveva essere qualcosa di semplice !! Non potrei vedere la foresta per gli alberi !! grazie. – jimplode

2

Spero che il following link possa fornire l'aiuto.

E anche provare ad aggiungere il seguente:

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

Annotato come la domanda era già stata risolta, e questo non funzionerebbe come è il protocollo sbagliato, sto usando http, non net.tcp. – jimplode

+3

Da quando ho visto una voce per net.tcp nell'indirizzo di base, presumo che lo stiate usando anche voi. Inoltre, quando ho risposto alla domanda, non ho ricevuto l'avviso sull'esistenza di un'altra risposta. Grazie. –

6

Sto usando NetTcpBinding per tutti. Nel mio caso ho avuto lo stesso problema e risolto con l'aggiunta di:

(a) un behaviourConfiguration = "" per l'endpoint mex

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

(b) un behaviourConfiguration = "mex" al servizio definizione:

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

(c) la voce comportamento

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