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