我已多次尝试让我的WCF服务公开MetaData。相反,我一直保持例外:
合约名称'IMetadataExchange' 无法在列表中找到 服务实施的合同 的 SecurityBroker 即可。添加ServiceMetadataBehavior到 配置文件或 ServiceHost直接启用支持 这份合同。
...使用IE手动浏览服务时。
(我认为这与我的客户端应用程序无法生成服务引用的原因相同。宝贝步骤和所有内容)
然而我的web.config看起来还不错:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<behaviors>
<endpointBehaviors>
<behavior name="webHttpEnablingBehaviour">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="webHttpEnablingBehaviour">
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="IWW.MIGTurbo2.WCF.Security.SecurityBroker">
<endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" />
<endpoint address=""
binding="webHttpBinding"
bindingConfiguration="default"
contract="IWW.MIGTurbo2.WCF.Security.ISecurityBroker"
behaviorConfiguration="webHttpEnablingBehaviour">
</endpoint>
</service>
</services>
<client />
<bindings>
<webHttpBinding>
<binding name="default" />
</webHttpBinding>
</bindings>
</system.serviceModel>
所以我的 IMetadataExchange 合约定义为 mex 很好,并且我已经看到了。我错过了一些愚蠢的东西吗?
修改
如果有用,我的服务定义如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="IWW.MIGTurbo2.WCF.Security.SecurityBroker" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" %>
答案 0 :(得分:9)
您的配置文件在“endpoint”元素上具有behaviorConfiguration属性,但您还需要在“service”元素上使用它。
答案 1 :(得分:2)
我正在使用NetTcpBinding。在我的情况下,我遇到了同样的问题并通过添加:
来解决它(a)对mex端点
的behaviorConfiguration =“” <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" behaviourConfiguration="" />
(b)对服务定义的behaviorConfiguration =“mex”:
<services>
<service name="AcmeService" behaviorConfiguration="mex">
(c)行为条目
<behaviors>
<serviceBehaviors>
<behaviour name="mex">
<serviceDebug includeExceptionDetailInFaults="false"/>
<serviceMetadata />
</behavior>
</serviceBehaviors>
</behaviors>