WCF MetaData无法正常工作

时间:2009-05-18 09:25:21

标签: wcf

我已多次尝试让我的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"   %>

2 个答案:

答案 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>