Dot-Net

如果我設置 HttpGetEnabled = false 會發生什麼

  • July 23, 2020

我對元數據發布概念感到困惑。

如果在我寫的 WCF 服務配置文件中:

 <serviceMetadata httpGetEnabled="false"/>

不管是真是假。當我嘗試使用“添加服務引用…”在客戶端應用程序中提供服務引用並點擊“發現”時,我能夠檢索服務引用。

但是當刪除以下兩行時: -

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

<serviceMetadata httpGetEnabled="false"/>

現在,當我嘗試使用“添加服務引用…”在客戶端應用程序中提供引用並點擊“發現”時,我無法檢索服務引用…。

現在誰能告訴我這到底是什麼意思。為什麼將其設置為 False 後仍然允許設置參考。以及為什麼在刪除這些行之後不允許設置參考。

MEX 和 WSDL 是兩種不同的方案,用於告訴潛在客戶您的服務結構。因此,您可以選擇以“元數據交換格式”(MEX) 或“ Web 服務描述語言”(WSDL) 的形式公開您的服務契約——後者可通過 HTTP(s) 訪問。

因此,為了生成代理,您需要元數據資訊。當您刪除 serviceMetadata-line 時,您表示您沒有提供 WSDL 格式的元數據。

但是之前的行,在 MEX 中發布您的元數據,仍然處於活動狀態,因此您可以從這些元數據生成代理。

由此自然而然地得出,當您既不提供 WSDL 也不提供 MEX 格式的資訊時,您將無法生成代理。

正如 Joel C 正確指出的那樣,綁定是一個(n 幾乎)正交概念。您是否允許客戶端通過基本的 HTTP、ws HTTP、網路命名管道或水晶球與您交談,完全不取決於您如何發布您的服務。

WCF 安全指導項目和/或 MS WCF 安全“實踐和模式”可能會提供更深入的見解。

引用自:https://stackoverflow.com/questions/5671885