在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>
答案 0 :(得分:12)
ArsenMkrt有正式答案。更简单地说:
为了更具体地回答您的问题,您的服务就是这一行:
<service name ="WCFService.Services" behaviorConfiguration="metaDataBehavior">
哪个指向此配置
<behavior name="metaDataBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
这可能是它仍然有效的原因,尽管我认为您需要指定MEX端点。
答案 1 :(得分:7)
IMetadataExchange Interface公开用于返回有关服务的元数据的方法。 编写Windows Communication Foundation(WCF)服务时,发布有关服务的元数据很有用。例如,元数据可以是Web服务描述语言(WSDL)文档,该文档描述服务使用的所有方法和数据类型。返回关于WCF服务的元数据允许服务的消费者容易地为该服务创建客户端。
答案 2 :(得分:6)
区别在于:
<serviceMetadata httpGetEnabled="true"/>
允许您使用HTTP协议检索元数据。
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
允许您使用ws-metadata协议检索元数据。
只是&lt; serviceMetadata httpGetEnabled =“true”/&gt;可以工作,但并非所有客户都可以打电话给你(因为他们无法检索元数据来创建代理)。
标准是发布两者。
另请参阅 ServiceMetadataBehavior Class (MSDN)。
答案 3 :(得分:0)
如果没有IMetadataExchange,WCF服务会将元数据信息公开给客户端,但WCF不保证公开元数据,因为WCF默认功能是将元数据公开给客户端。
通过IMetadataExchange以标准化的方式公开元数据。 IMetadataExchange接口遵循行业标准。