Pergunta

Eu procurei na Web a resolução desse erro, mas tudo o que encontrei sugere o que tenho está correto.

Talvez alguém possa dar uma olhada e identificar um erro óbvio que eu simplesmente não consigo ver.

Eu tenho um serviço do Windows, hospedando dois contratos:

  1. ICONFIGURAÇÕES SERVICE
  2. IconfigurationAdminservice

O Serviço de Administração herda do Serviço Padrão, pois quero que os dois contratos implementem os métodos básicos.

O problema é que posso hospedar bem os serviços, até tentar adicionar um mex.

Então eu recebo a seguinte exceção:

O nome do contrato 'iMetadataExchange' não pôde ser encontrado na lista de contratos implementados pelo Serviço 'Configurationwcfservice'.

E esta é a minha configuração, tudo está configurado pela Config, nada feito através do código.

<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>
Foi útil?

Solução

Você tem o revestimento incorreto - a configuração do WCF é sensível ao maiúsculas de minúsculas

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

Observe que o "D" não está capitalizado em IMetadataExchange Você pode verificar o dobro do Sintaxe no MSDN.

Outras dicas

Estou usando o NettcpBinding para todos. No meu caso, eu estava tendo o mesmo problema e o resolvi adicionando:

(a) a comportamentoOrconfiguration = "" para o ponto final do MEX

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

(b) A comportamentalOrconfiguration = "Mex" para a definição de serviço:

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

(c) a entrada de comportamento

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

Espero que Link seguinte Pode fornecer a ajuda.

E também tente adicionar o seguinte:

<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top