Получение исключения параметра безопасности при доступе к службе WCF
Ниже приведены обязательные настройки моей службы WCF.
- Анонимный доступ: выключен
- Обычная аутентификация: вкл
- Встроенная проверка подлинности Windows: выключено!
поддержка протокола HTTP.
Я получаю следующее исключение при доступе к моей службе WCF:
Параметры безопасности для этой службы требуют "анонимной" аутентификации, но она не включена для приложения IIS, в котором размещается эта служба.
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType ="Basic" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="WMWcfWebServiceLib.Service1Behavior"
name="WMWcfWebServiceLib.WMWcfWebService">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding"
contract="WMWcfWebServiceLib.IWMWebService">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/Design_Time_Addresses/WMWcfWebServiceLib/Service1/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WMWcfWebServiceLib.Service1Behavior">
<!-- To avoid disclosing metadata information,
set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="True"/>
<!-- To receive exception details in faults for debugging purposes,
set the value below to true. Set to false before deployment
to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
Пожалуйста помоги!!
редактировать
Я могу получить доступ к службе WCF через веб-браузер со следующими изменениями:
Изменяет режим безопасности на TransportCredentialOnly и удаляет конечную точку Mex, но теперь, как очевидно, я не могу создать прокси на стороне клиента.
Пожалуйста, дайте мне знать, где я не прав?
1 ответ
Если вы хотите поддерживать HTTP только ваша конфигурация не используется вообще, потому что mode="Transport"
требует HTTPS. Сначала выясните, почему не используется config (возможно, неверное имя типа в элементе service). Затем измените режим безопасности на TransportCredentialOnly
, Но знайте, что TransportCredentialOnly
+ Обычная аутентификация означает, что HTTP-запросы будут содержать текстовое имя пользователя и пароль Windows. В большинстве случаев такая реализация не пройдет никакого аудита безопасности.
Редактировать:
Вы можете создать прокси без mex конечной точки, если вы все еще поддерживаете httpGetEnabled
в поведении метаданных службы.