IMetaDataExchange не удалось найти в списке контрактов, реализованных службой
Я искал в Интернете разрешение этой ошибки, но все, что я нашел, указывает на то, что у меня есть.
Может кто-то может взглянуть и заметить явную ошибку, которую я просто не вижу.
У меня есть служба Windows, в которой есть два контракта:
- IConfigurationService
- IConfigurationAdminService
Служба администратора наследует стандартную службу, так как я хочу, чтобы оба контракта реализовали основные методы.
Проблема в том, что я могу размещать сервисы отлично, пока не попытаюсь добавить MEX.
Затем я получаю следующее исключение:
Название контракта "IMetaDataExchange" не может быть найдено в списке контрактов, реализованных службой "ConfigurationWCFService".
И это моя конфигурация, все настроено с помощью config, ничего не делается через код.
<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>
Ответы
Ответ 1
У вас неправильный корпус: конфигурация WCF чувствительна к регистру
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
Обратите внимание, что значение "D" не заглавное в IMetadataExchange
. Вы можете дважды проверить синтаксис в MSDN.
Ответ 2
Я использую NetTcpBinding для всех. В моем случае у меня была одна и та же проблема и разрешил ее, добавив:
(a) behaviourConfiguration = "" для конечной точки mex
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange"
behaviourConfiguration="" />
(b) behaviourConfiguration = "mex" для определения службы:
<services>
<service name="AcmeService" behaviourConfiguration="mex">
(c) Запись поведения
<behaviors>
<serviceBehaviors>
<behaviour name="mex">
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>
Ответ 3
Я надеюсь, что следующая ссылка может предоставить вам помощь.
А также попробуйте добавить следующее:
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>