2009-10-22 78 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界面遵循行業標準。