IMetadataExchange não pôde ser encontrado na lista de contratos implementados pelo serviço
-
28-09-2019 - |
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:
- ICONFIGURAÇÕES SERVICE
- 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>
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"/>