我知道这已被多次询问,并多次回答,但是,应该工作的所有提供的样本今天似乎都不适合我。
当我尝试启动主机时,我不断收到以下错误:
“在服务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"/>
非常非常感谢任何帮助:)
答案 0 :(得分:25)
请务必在配置的behaviorConfiguration
元素中指定service
,以便允许httpGet
或httpsGet
。
我看到您已经定义了一个名为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":"..."
}
}
}