IMFadataExchange在WCF中的重要性是什么?

时间:2009-10-22 08:17:10

标签: wcf

在WCF中IMetadataExchange的用途和重要性是什么?

我有以下app.config文件,其中我没有使用IMetadataExchange端点,但我仍然可以创建我的代理客户端。我已经读过,如果我不使用IMetadataExchange端点,AddServiceReference将无法工作,因为我的服务不公开元数据。如果没有暴露IMetadataExchange端点,它是如何工作的?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="metaDataBehavior">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <services>
           <service name ="WCFService.Services" behaviorConfiguration="metaDataBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8090/Services/"/>
          </baseAddresses>
        </host>
        <endpoint address="" binding="basicHttpBinding" contract="WCFService.IMathOperations"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

4 个答案:

答案 0 :(得分:12)

ArsenMkrt有正式答案。更简单地说:

  • 如果您没有,则添加服务引用将无法正常工作
  • 您应该从生产服务器中删除它,以便黑客无法添加服务引用

为了更具体地回答您的问题,您的服务就是这一行:

       <service name ="WCFService.Services" behaviorConfiguration="metaDataBehavior">

哪个指向此配置

    <behavior name="metaDataBehavior">
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>

这可能是它仍然有效的原因,尽管我认为您需要指定MEX端点。

答案 1 :(得分:7)

IMetadataExchange Interface公开用于返回有关服务的元数据的方法。 编写Windows Communication Foundation(WCF)服务时,发布有关服务的元数据很有用。例如,元数据可以是Web服务描述语言(WSDL)文档,该文档描述服务使用的所有方法和数据类型。返回关于WCF服务的元数据允许服务的消费者容易地为该服务创建客户端。

答案 2 :(得分:6)

区别在于:

<serviceMetadata httpGetEnabled="true"/>

允许您使用HTTP协议检索元数据。

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

允许您使用ws-metadata协议检索元数据。

只是&lt; serviceMetadata httpGetEnabled =“true”/&gt;可以工作,但并非所有客户都可以打电话给你(因为他们无法检索元数据来创建代理)。

标准是发布两者。

另请参阅 ServiceMetadataBehavior Class (MSDN)。

答案 3 :(得分:0)

如果没有IMetadataExchange,WCF服务会将元数据信息公开给客户端,但WCF不保证公开元数据,因为WCF默认功能是将元数据公开给客户端。

通过IMetadataExchange以标准化的方式公开元数据。 IMetadataExchange接口遵循行业标准。