2009-10-22 77 views
7

IMetadataExchange在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> 

回答

7

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

12

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

  • 如果没有它,添加服务引用将无法工作
  • 你应该从生产服务器中删除,从而使黑客无法添加服务引用

为了更具体地回答你的问题,你有你的服务这条线:

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

指向此配置

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

这可能是为什么它仍然有效,但我认为你需要指定MEX端点。

+1

+1正确 - 没有元数据 - >没办法发现服务提供了什么,在这种情况下,您需要一个“预制”的代理客户端作为代码或其他连接到服务的代码 – 2009-10-22 09:01:07

+0

+1 “•您应该从生产服务器中删除它,以便黑客无法添加服务参考” – 2013-03-17 22:29:42

+0

防止黑客添加服务参考不会阻止黑客调用/滥用/欺骗您的服务。 – Mark 2015-08-25 21:04:24

6

的区别是:

<serviceMetadata httpGetEnabled="true"/> 

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

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

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

只需< serviceMetadata httpGetEnabled =“true”/>有效,但并非所有客户端都可以调用您(因为它们无法检索元数据来创建代理)。

标准是发布两者。

另请参阅ServiceMetadataBehavior Class(MSDN)。

+1

这是一个很好的答案。为了补充答案,请参阅此链接: https://msdn.microsoft.com/en-us/library/aa751951.aspx – Robotron 2016-01-12 15:54:57

0

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

通过IMetadataExchange以完全标准化的方式显示元数据。 IMetadataExchange界面遵循行业标准。