mexHttpBinding - 直接将ServiceMetadataBehavior添加到配置文件或ServiceHost以启用对此合同的支持

时间:2011-09-16 08:11:10

标签: wcf wcf-binding config meta endpoint

我知道这已被多次询问,并多次回答,但是,应该工作的所有提供的样本今天似乎都不适合我。

当我尝试启动主机时,我不断收到以下错误:

“在服务TraceService实现的合同列表中找不到合同名称'IMetadataExchange'。将ServiceMetadataBehavior直接添加到配置文件或ServiceHost以支持此合同。”

根据Microsoft的示例,我的服务托管在托管的Windows服务主机中:http://msdn.microsoft.com/en-us/library/ms733069%28v=vs.90%29.aspx

这是我的简单配置:

  <system.serviceModel>
    <services>
      <service name="Daff.Lae.Service.TraceService">
        <endpoint address="" binding="wsHttpBinding" name="TraceService" contract="Contracts.Service.ITraceService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:8080/TraceService" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

当然,如果我删除这一行没有错误,问题会变得更有趣:

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

非常非常感谢任何帮助:)

3 个答案:

答案 0 :(得分:25)

请务必在配置的behaviorConfiguration元素中指定service,以便允许httpGethttpsGet

我看到您已经定义了一个名为DefaultBehavior的serviceBehavior - 现在您需要做的就是将behaviorConfiguration="DefaultBehavior"添加到service元素,以便该行变为:

<service name="Daff.Lae.Service.TraceService" behaviorConfiguration="DefaultBehavior">

如果您没有明确指定服务的行为,则默认情况下不允许使用HTTP GET和HTTPS GET,并且不会公开您的元数据。

答案 1 :(得分:2)

当您使用WS-Http时,您绑定到HTTPS协议,因此您需要使用正确的MEX绑定;

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

并将baseaddress更改为https。

或(反过来)将你的wsHttp绑定转换为basicHttp绑定,事情将开始为你工作。

答案 2 :(得分:0)

{  
   "auths":{  
      "https://registry.gitlab.com":{  
         "username":"...",
         "password":"...",
         "email":"...",
         "auth":"..."
      }
   }
}