11

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

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

我有一个 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>
4

3 回答 3

12

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

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

请注意,“D”不是大写的。IMetadataExchange您可以仔细检查MSDN 上的语法

于 2010-10-06T11:23:40.790 回答
6

我正在为所有人使用 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>
于 2013-01-22T20:01:08.467 回答
2

我希望以下链接可以为您提供帮助。

并尝试添加以下内容:

<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
于 2010-10-06T11:46:17.907 回答