我有一个 c# 应用程序,它自承载 OData WCF 数据服务。
主机的类型为 DataServiceHost 并且以编程方式在代码中配置,而不是使用配置文件。
与该服务的连接是通过使用 SSL 和基本身份验证的 webHttpBinding 进行的。我的服务侦听端口 1234。
当客户端浏览到 https://localhost:1234$metadata 时,它们可以访问服务的 xml 元数据。
我想阻止访问元数据,但无法弄清楚如何禁用它?
有谁知道如何在上述情况下禁用对$metadata的访问?
我终于找到了一种方法......
// 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");
我多次尝试设置服务元数据行为,但没有效果。使HttpsGetEnabled = false
生效的诀窍是创建名为"$metadata"的元数据终结点。
如果不创建 mex 终结点,则 DataServiceHost 似乎仅使用自己的元数据终结点,而忽略您的行为设置。
呵呵