Dot-Net

在服務實施的契約列表中找不到 IMetaDataExchange

  • October 6, 2013

我在網上搜尋了這個錯誤的解決方法,但我發現的一切都表明我所擁有的都是正確的。

也許有人可以看看並發現一個我看不到的明顯錯誤。

我有一個 Windows 服務,託管兩個契約:

  1. 配置服務
  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>

您的大小寫不正確 - WCF 配置區分大小寫

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

請注意,“D”不是大寫的。IMetadataExchange您可以仔細檢查MSDN 上的語法

我正在為所有人使用 NetTcpBinding。就我而言,我遇到了同樣的問題並通過添加解決了它:

(a) 到 mex 端點的 behaviorConfiguration=""

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

(b) 服務定義的 behaviorConfiguration=“mex”:

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

(c) 行為入口

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

引用自:https://stackoverflow.com/questions/3871827