Я настроил службу WCF, чтобы требовать аутентификацию NTLM, используя следующую конфигурацию:
<system.serviceModel>
<bindings>
<customBinding>
<binding name="BinarySecurityBinding">
<binaryMessageEncoding/>
<httpTransport authenticationScheme="Ntlm"/>
</binding>
</customBinding>
</bindings>
<services>
<service name="Services.LogisticsServices" behaviorConfiguration="ServiceBehavior">
<endpoint address="" binding="customBinding" bindingConfiguration="BinarySecurityBinding" contract="Services.ILogisticsServices" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Я сделал это так, чтобы приложения, использующие веб-службу, были вынуждены войти в систему, потому что все операции моей службы используют олицетворение ([OperationBehavior(Impersonation = ImpersonationOption.Required)]
).
В IIS 7 я включил анонимную аутентификацию и проверку подлинности Windows.
Когда я захожу на http://test.server/LogisticsServices.svc
, где размещается описанная выше служба, я вижу страницу описания службы по умолчанию анонимно. Однако, когда Visual Studio пытается получить доступ к http://test.server/LogisticsServices.svc/$metadata
для создания клиентского прокси, сервер отвечает HTTP-кодом 401 и ожидает проверки подлинности. Я не только ожидал, что метаданные будут доступны анонимно, но и сервер не принимает те учетные данные, которые я ему предоставляю (хотя я точно знаю, что они верны).
Тестируя другую конфигурацию, я попытался удалить authenticationScheme
из транспорта моей привязки, просто чтобы иметь возможность сгенерировать прокси клиента, но это приводит к исключению, поскольку операции службы требуют олицетворения ([OperationBehavior(Impersonation = ImpersonationOption.Required)]
).
Чего мне не хватает в конфигурации моего сервиса, чтобы метаданные сервиса были доступны анонимно? Я также открыт для предложений, если я подхожу ко всему неправильно.