mexHttpBinding - 将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost 以启用对此协定的支持
Posted
技术标签:
【中文标题】mexHttpBinding - 将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost 以启用对此协定的支持【英文标题】:mexHttpBinding - Add a ServiceMetadataBehavior to the configuration file or to the ServiceHost directly to enable support for this contract 【发布时间】:2011-11-18 12:02:57 【问题描述】:我知道这个问题已经被问过很多次,也回答过很多次,但是,所有提供的应该工作的示例今天似乎都不适合我。
当我尝试启动主机时,我不断收到以下错误:
“在服务 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"/>
任何帮助将不胜感激:)
【问题讨论】:
【参考方案1】:请务必在您的配置的service
元素中指定behaviorConfiguration
,以便允许httpGet
或httpsGet
。
我看到您已经定义了一个名为 DefaultBehavior
的 serviceBehavior - 现在您需要做的就是将 behaviorConfiguration="DefaultBehavior"
添加到 service
元素中,因此该行变为:
<service name="Daff.Lae.Service.TraceService" behaviorConfiguration="DefaultBehavior">
如果您没有为您的服务明确指定行为,则默认情况下 HTTP GET 和 HTTPS GET 都是不允许的,并且您的元数据不会被公开。
【讨论】:
@agAus - 是的,但您尚未指定您的服务将使用您的默认行为。您需要将 'behaviorConfiguration' 属性添加到配置中的 'service' 元素中,如我的回答所示。 为清晰起见编辑了我的答案。 谢谢。这已经解决了:)【参考方案2】:当您使用 WS-Http 时,您将绑定到 HTTPS 协议,因此您需要使用正确的 MEX 绑定;
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
并将基地址更改为 https。
或者(反过来)将您的 wsHttp 绑定转换为 basicHttp 绑定,然后一切都会开始为您工作。
【讨论】:
啊...我没有意识到 wsHttpBinding 意味着它是 https?我今天忙于发布产品,但肯定想试试这个并回复你。我已经为我的问题添加了书签,以便我可以相应地更新帖子。谢谢:)【参考方案3】:`<services>
<service name="MyService.Service1" behaviorConfiguration="Service1" >
</services>
`
where MyService is the application name , Service1 is the default implementation class for IService1
`
<protocolMapping>
//Remove any http or https bindings provided
</protocolMapping>
`
It should help when you use WCF Application Project
【讨论】:
以上是关于mexHttpBinding - 将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost 以启用对此协定的支持的主要内容,如果未能解决你的问题,请参考以下文章
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named ‘demo1Servic
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named ‘demo1Servic
普歌-解决MySQL安装到start servic出现安装未响应或超时未安装成功
iptables规则备份和恢复firewall的9个zone关于zone的操作和关于servic