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

Emb*_*rja 7 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>
Run Code Online (Sandbox Code Playgroud)

Shi*_*iji 12

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

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

要更具体地回答您的问题,您可以在服务上使用以下内容:

       <service name ="WCFService.Services" behaviorConfiguration="metaDataBehavior">
Run Code Online (Sandbox Code Playgroud)

哪个指向此配置

    <behavior name="metaDataBehavior">
      <serviceMetadata httpGetEnabled="true"/>
    </behavior>
Run Code Online (Sandbox Code Playgroud)

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


Ars*_*yan 7

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


dan*_*iel 6

不同之处是:

<serviceMetadata httpGetEnabled="true"/>
Run Code Online (Sandbox Code Playgroud)

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

<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
Run Code Online (Sandbox Code Playgroud)

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

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

标准是发布两者.

另请参见ServiceMetadataBehavior类(MSDN).