2016-06-10 2 views
1

У меня есть приложение C#, в котором self находится служба данных OData WCF.

Хост имеет тип DataServiceHost и сконфигурирован программно в коде, не используя файл конфигурации.

Соединения с услугой - через webHttpBinding, использующее SSL и базовую аутентификацию. Моя служба прослушивает порт 1234.

Когда клиент просматривает https://localhost:1234 $ метаданных, они могут получить доступ к метаданным xml для службы.

Я хочу предотвратить доступ к метаданным в настоящее время, но не могу решить, как отключить его?

Кто-нибудь знает, как отключить доступ к метаданным $ в приведенном выше сценарии?

ответ

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

Смежные вопросы