WCF Odata - 禁用元数据($元数据)?

时间:2016-06-10 12:17:22

标签: c# wcf odata

我有一个自己托管OData WCF数据服务的c#应用程序。

主机的类型为 DataServiceHost ,并在代码中以编程方式配置,而不是使用配置文件。

与服务的连接是通过webHttpBinding使用SSL和基本身份验证。我的服务侦听端口1234。

当客户浏览到https://localhost:1234 $元数据时,他们可以访问该服务的xml元数据。

我想暂时阻止访问元数据,但无法解决如何禁用元数据的问题?

有谁知道如何在上述场景中禁用对$ metadata的访问?

1 个答案:

答案 0 :(得分:1)

我终于找到了这样做的方法....

// Disable mex ($metadata)
ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
{
    smb = new ServiceMetadataBehavior();
    smb.HttpsGetEnabled = false;
}
host.Description.Behaviors.Add(smb);

host.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName, 
                MetadataExchangeBindings.CreateMexHttpsBinding(),
                "$metadata");

我玩了几次设置ServiceMetadataBehavior没有任何效果。让HttpsGetEnabled = false生效的诀窍是创建一个名为“$ metadata”的元数据端点。

如果您没有创建mex端点,那么DataServiceHost似乎只使用自己的元数据端点并忽略您的行为设置。

HTH