我对元数据发布概念感到困惑。
如果在WCF服务配置文件中我写过:
<serviceMetadata httpGetEnabled="false"/>
无论是真是假。当我尝试使用“添加服务引用...”在客户端应用程序中提供服务引用并单击“发现”时,我能够检索服务引用。
但是当删除以下两行时: -
<endpoint address="mex" binding="mexBasicHttpBinding" contract="IMetadataExchange"/>
<serviceMetadata httpGetEnabled="false"/>
之后,当我尝试使用“添加服务引用....”并点击“发现”在客户端应用程序中提供引用时,我 NOT 能够检索服务引用.. ..
现在任何人都可以告诉我它究竟意味着什么。 为什么在将其设置为False之后仍然允许设置参考。为什么在删除这些行后,它不允许设置引用。
-Anil
答案 0 :(得分:21)
MEX和WSDL是两种不同的方案,可以告诉潜在客户您的服务结构。因此,您可以选择将服务合同公开为“元数据交换格式”(MEX)或“web service description language”(WSDL) - 后者可通过HTTP访问。
因此,为了生成代理,您需要元数据信息。当您删除serviceMetadata-line时,您说您没有以WSDL格式提供元数据。
但之前在MEX中发布元数据的行仍处于活动状态,因此您可以从这些元数据生成代理。
自然地说,当你既不提供WSDL也不提供MEX格式的信息时,你就无法生成代理。
正如Joel C正确指出的那样,绑定是一个(几乎)正交的概念。是否允许客户通过基本HTTP,HTTP,网络命名管道或水晶球与您交谈,这完全不取决于您如何发布服务。
WCF security guidance project和/或MS "practises and patterns" for WCF security可能会提供更深入的见解。
答案 1 :(得分:5)
您正在添加服务引用,该引用会生成基于Metadata Exchange(mex)的代理。 httpGetEnabled配置允许您设置一个http端点,该端点允许使用WSDL生成非mex代理,例如旧版.NET Web服务代理。它们是不同的协议,由不同的设置控制。我相信如果你有<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/SampleService?wsdl"/>
,你可以从.NET 2.0添加一个Web服务引用,使用配置<serviceMetadata httpGetEnabled="false"/>
无法做到。