我有一个c#应用程序,它由self托管OData WCF数据服务。
主机类型为DataServiceHost,是以编程方式在代码中配置的,而不是使用配置文件。
到服务的连接是通过webHttpBinding连接的,它使用SSL和基本身份验证。我的服务在1234端口收听。
当客户端浏览到https://localhost:1234$metadata时,他们可以访问服务的xml数据。
我现在想阻止对元数据的访问,但无法解决如何禁用元数据?
在上述场景中,有人知道如何禁用对$metadata的访问吗?
发布于 2016-07-06 19:23:31
我终于找到了办法.
// 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
https://stackoverflow.com/questions/37748094
复制相似问题