在服务实现的合同列表中找不到IMetaDataExchange

jim*_*ode 11 .net wcf exception-handling metadata wcf-configuration

我已经在网上搜索了这个错误的解决方法,但我发现的一切都表明我所拥有的是正确的.

也许有人可以看一看并发现一个我看不见的明显错误.

我有一个Windows服务,托管两个合同:

  1. IConfigurationService
  2. IConfigurationAdminService

管理服务继承自标准服务,因为我希望两个合同都实现基本方法.

问题是我可以很好地托管服务,直到我尝试添加MEX.

然后我得到以下异常:

在服务'ConfigurationWCFService'实现的合同列表中找不到合同名称'IMetaDataExchange'.

这是我的配置,一切都是由配置配置,没有通过代码完成.

<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>
Run Code Online (Sandbox Code Playgroud)

Phi*_*eck 12

您的外壳不正确 - WCF配置区分大小写

 <endpoint address="mex"
              binding="mexHttpBinding"
              contract="IMetadataExchange" />
Run Code Online (Sandbox Code Playgroud)

请注意,"D"未大写.IMetadataExchange您可以仔细检查MSDN上语法.


Lor*_*pts 6

我正在使用NetTcpBinding.就我而言,我遇到了同样的问题并通过添加以下内容解决了这个问题

(a)对mex端点的行为配置=""

<endpoint address="mex" 
          binding="mexTcpBinding" 
          contract="IMetadataExchange" 
          behaviourConfiguration="" />
Run Code Online (Sandbox Code Playgroud)

(b)对服务定义的行为配置="mex":

<services>
    <service name="AcmeService" behaviourConfiguration="mex">
Run Code Online (Sandbox Code Playgroud)

(c)行为条目

<behaviors>
    <serviceBehaviors>
        <behaviour name="mex">
            <serviceDebug includeExceptionDetailInFaults="false"/>
            <serviceMetadata />
        </behavior>
     </serviceBehaviors>
 </behaviors>
Run Code Online (Sandbox Code Playgroud)