我有一个自己托管OData WCF数据服务的c#应用程序。
主机的类型为 DataServiceHost ,并在代码中以编程方式配置,而不是使用配置文件。
与服务的连接是通过webHttpBinding使用SSL和基本身份验证。我的服务侦听端口1234。
当客户浏览到https://localhost:1234 $元数据时,他们可以访问该服务的xml元数据。
我想暂时阻止访问元数据,但无法解决如何禁用元数据的问题?
有谁知道如何在上述场景中禁用对$ metadata的访问?
答案 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