WCF - 在服务实现的合同列表中找不到IMetadataExchange

时间:2012-01-24 13:34:01

标签: wcf

我一直在尝试配置我的WCF服务以公开SOAP和Json端点。但是,这样做我似乎打破了我的MEX端点错误:

  

System.InvalidOperationException:在服务TestService实现的合同列表中找不到合同名称“IMetadataExchange”。将ServiceMetadataBehavior直接添加到配置文件或ServiceHost以启用对此合同的支持。

  <configuration>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name ="soapBinding">
          <security mode="None"/>
        </binding>
      </basicHttpBinding>
      <webHttpBinding>
        <binding name="webBinding"/>
      </webHttpBinding>
      <mexHttpBinding>
        <binding name="mexBinding"/>
      </mexHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name="poxBehavior">
          <webHttp/>
        </behavior>
        <behavior name="jsonBehavior">
          <enableWebScript  />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="defaultBehavior">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="TVD_WCF_Services.TestService" behaviorConfiguration="defaultBehavior">
        <host>
          <baseAddresses>
            <!-- note, choose an available port-->
            <add baseAddress="http://localhost:8732/Design_Time_Addresses/TVD_WCF_Services/TestService/" />
          </baseAddresses>
        </host>
        <endpoint address="soap" binding="basicHttpBinding" bindingConfiguration="soapBinding" contract="TVD_WCF_Services.ITestService" />
        <endpoint address="pox" binding="webHttpBinding" bindingConfiguration="webBinding" behaviorConfiguration="poxBehavior" contract="TVD_WCF_Services.ITestService" />
        <endpoint address="json" binding="webHttpBinding" bindingConfiguration="webBinding" behaviorConfiguration="jsonBehavior" contract="TVD_WCF_Services.ITestService" />
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="mexBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

我确定配置有问题,但对于我的生活,我无法弄清楚它是什么。请注意,到目前为止,我没有更改除App.config之外的任何内容,所以我确定问题在于。

我在网站上查看了与此相关的各种其他问题,但无济于事。

任何可以提供帮助的WCF大师?

4 个答案:

答案 0 :(得分:3)

在.NET 4.0框架中的单个服务上同时定义SOAP,Xml和Json端点存在问题。

只需删除Xml或Json端点,它应该没有任何问题。如果你想要两者都工作,你可以将它设置为.NET 3.5,它可以正常工作。

我已经查看了这两个框架的源代码,但是存在导致此问题的差异。

请在Microsoft connect中找到 link ,我将其作为错误提出。请进行投票,以便MS接受并在以后的版本中解决问题。

答案 1 :(得分:0)

试试这个:

   <endpoint address="mex" binding="mexHttpBinding"
             bindingConfiguration="mexBinding" 
             contract="System.ServiceModel.Description.IMetadataExchange" />

我认为contract属性需要完全限定的类型名称。

答案 2 :(得分:0)

席西斯托

确保您拥有app.config / web.config的项目具有对System.ServiceModel的引用

问候 GregJF

答案 3 :(得分:-1)

我有同样的问题。 最后,我发现我没有在主项目中引用System.ServiceModel。 请检查参考。