如果我设置HttpGetEnabled = false会发生什么

Ani*_*ani 16 .net wcf binding metadata wcf-binding

我对元数据发布概念感到困惑.

如果在WCF服务配置文件中我写了:

  <serviceMetadata httpGetEnabled="false"/>
Run Code Online (Sandbox Code Playgroud)

无论是真是假.当我尝试使用"添加服务引用..."在客户端应用程序中提供服务引用并单击"发现"时,我能够检索服务引用.

但删除以下两行: -

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

<serviceMetadata httpGetEnabled="false"/>
Run Code Online (Sandbox Code Playgroud)

如今后,当我试图给使用客户端应用程序引用"添加服务引用...",并点击"查看",我能够检索服务参考.

现在任何人都可以告诉我它究竟意味着什么.为什么在将其设置为False之后仍然允许设置参考.为什么在删除这些行之后它不允许设置引用.

-Anil

Cor*_*ius 21

MEX和WSDL是两种不同的方案,可以告诉潜在客户您的服务结构.因此,您可以选择将服务合同公开为"元数据交换格式"(MEX)或" Web服务描述语言 "(WSDL) - 后者可通过HTTP访问.

因此,为了生成代理,您需要元数据信息.当您删除serviceMetadata-line时,您说您没有以WSDL格式提供元数据.

但是,之前在MEX中发布元数据的行仍处于活动状态,因此您可以从这些元数据生成代理.

从那些自然地说,当您既不提供WSDL也不提供MEX格式的信息时,您无法生成代理.

正如Joel C正确指出的那样,绑定是一个(几乎)正交的概念.是否允许客户通过基本HTTP,HTTP,网络命名管道或水晶球与您通信,这完全不取决于您如何发布服务.

WCF安全指导项目和/或MS "实践和模式"为WCF安全性可能会提供更深入的了解.


Joe*_*l C 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"/>.

  • 您的WCF服务如何与其他进程(其端点绑定)通信以及它如何公开有关自身的元数据(其元数据配置)彼此独立.如果您打算将服务作为SOAP Web服务(使用配置为`WsHttpBinding`的端点)访问服务,那么将元数据公开为WSDL(使用`httpGetEnabled ="true"和`httpGetUrl`)是有意义的,设置可以没有其他人使用. (2认同)
  • 它只与WCF的发现方面有关.没有它你就无法生成代理.如果您正在生成WCF代理,那么将使用MetadataExchange配置; 如果您使用的是基于WSDL的代理,那么将使用httpGetEnabled设置.但是,一旦你拥有代理,要么实际上*使用*服务,这些设置应该只影响生成代理的能力. (2认同)