WCF中的mex绑定错误

我正在使用VSTS 2008 + C#+ .NET 3.0。 我正在使用自托管的WCF服务。 执行以下语句时,会出现以下“未找到绑定”错误。 我已经发布了我的整个app.config文件,任何想法有什么问题?

ServiceHost host = new ServiceHost(typeof(MyWCFService)); 

错误信息:

无法通过绑定MetadataExchangeHttpBinding找到与端点的方案http匹配的基址。 注册的基地址方案是[https]。

完整的app.config:

                                  

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

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

            

我可以获得双倍分数吗? 🙂

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

  

我在Marc_s 回答的评论中提出了一个问题

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

marc_s回答

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

因此,解决方案是使用SAME address =“mex”声明多个端点,并使用如下所示的不同绑定

   

最近我发现有一个配置开关更容易,可用于在测试时启用MEX并在Live上禁用。

来自http://msdn.microsoft.com/en-us/library/aa395224.aspx

可以使用ServiceHostFactory类在Internet信息服务中创建从ServiceHost派生的自定义(IIS自定义ServiceHost,它添加ServiceMetadataBehavior(启用元数据发布),即使此行为未在服务的配置文件中显式添加也是如此。

编写一次启用元数据发布的命令性代码,然后在多个不同的服务中重用该代码。 这是通过创建一个派生自ServiceHost的新类并重写ApplyConfiguration()方法来强制添加元数据发布行为来实现的。

自定义服务主机MSDN文章中的示例代码

 //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"); } }