C# WCF中的mex绑定错误

C# WCF中的mex绑定错误,c#,.net,wcf,visual-studio-2008,wshttpbinding,C#,.net,Wcf,Visual Studio 2008,Wshttpbinding,我使用的是VSTS2008+C++.NET3.0。我使用的是自托管WCF服务。执行以下语句时,出现以下“未找到绑定”错误。我已经发布了我的整个app.config文件,有什么问题吗 ServiceHost host = new ServiceHost(typeof(MyWCFService)); 错误消息: 找不到与http方案匹配的基址 绑定MetadataExchangeHttpBinding的终结点。注册基地 地址方案是[https] 完整app.config: 您的服务的基址定义了“H

我使用的是VSTS2008+C++.NET3.0。我使用的是自托管WCF服务。执行以下语句时,出现以下“未找到绑定”错误。我已经发布了我的整个app.config文件,有什么问题吗

ServiceHost host = new ServiceHost(typeof(MyWCFService));
错误消息:

找不到与http方案匹配的基址 绑定MetadataExchangeHttpBinding的终结点。注册基地 地址方案是[https]

完整app.config:


您的服务的基址定义了“HTTPS://”-但您的mex地址是“HTTP”

如果您希望您的服务使用https://,您还需要使用mexHttpsBinding



马克

我能拿到双倍的分数吗?:)

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

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

我在一篇评论中问了一个问题


是否可以将http和https的IMetadataExchange作为 独立端点

马克回答

您应该能够为http://和定义第二个基址 将其用于http mex端点

因此,解决方案是声明具有相同address=“mex”和不同绑定的多个端点,如下所示

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

是否可以将http和https的IMetadataExchange作为单独的端点?他们的地址应该是什么?我的问题是关于http:和https的,而不是关于net.tcp协议。@MichaelFreidgeim:对不起,误读了。但同样适用:您应该能够为
http://
定义第二个基址,并将其用于http mex端点。此外,用户还需要更改服务元数据标记以启用https:“”希望我能多次投票给出此答案。为了让我的silverlight应用程序正常工作,我已经用了一天半的时间把头撞在墙上。这终于奏效了
//Add a metadata endpoint at each base address
//using the "/mex" addressing convention
foreach (Uri baseAddress in this.BaseAddresses)
{
    if (baseAddress.Scheme == Uri.UriSchemeHttp)
    {
        mexBehavior.HttpGetEnabled = true;
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexHttpBinding(),
                                "mex");
    }
    else if (baseAddress.Scheme == Uri.UriSchemeHttps)
    {
        mexBehavior.HttpsGetEnabled = true;
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexHttpsBinding(),
                                "mex");
    }
    else if (baseAddress.Scheme == Uri.UriSchemeNetPipe)
    {
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexNamedPipeBinding(),
                                "mex");
    }
    else if (baseAddress.Scheme == Uri.UriSchemeNetTcp)
    {
        this.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
                                MetadataExchangeBindings.CreateMexTcpBinding(),
                                "mex");
    }
}