IMetaDataExchange не найден в списке контрактов, реализованных сервисом - PullRequest
11 голосов
/ 06 октября 2010

Я искал в Интернете разрешение этой ошибки, но все, что я нашел, указывает на то, что у меня правильно.

Может быть, кто-то может взглянуть и заметить очевидную ошибку, которую я просто не вижу.

У меня есть служба Windows, на которой размещены два контракта:

  1. IConfigurationService
  2. IConfigurationAdminService

Служба администратора наследует от стандартной службы, поскольку я хочу, чтобы оба контракта реализовали основные методы.

Проблема в том, что я могу нормально размещать службы, пока не попытаюсь добавить MEX.

Тогда я получаю следующее исключение:

Не удалось найти имя контракта 'IMetaDataExchange' в списке контрактов, реализованных службой 'ConfigurationWCFService'.

И это мой конфиг, все настроено в конфиге, ничего не делается через код.

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

Ответы [ 3 ]

12 голосов
/ 06 октября 2010

У вас неправильный регистр - в конфигурации WCF учитывается регистр

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

Обратите внимание, что буква "D" не прописна в IMetadataExchange Вы можете дважды проверить синтаксис в MSDN .

6 голосов
/ 23 января 2013

Я использую NetTcpBinding для всех.В моем случае у меня возникла та же проблема, и я решил ее, добавив:

(a) attuourConfiguration = "" к конечной точке mex

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

(b) поведениеiourConfiguration = "mex«к определению услуги:

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

(c) Запись поведения

<behaviors>
    <serviceBehaviors>
        <behaviour name="mex">
            <serviceDebug includeExceptionDetailInFaults="false"/>
            <serviceMetadata />
        </behavior>
     </serviceBehaviors>
 </behaviors>
2 голосов
/ 06 октября 2010

Я надеюсь, что следующая ссылка может оказать вам помощь.

А также попробуйте добавить следующее:

<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...