2009-06-22 2 views
43

Я изо всех сил пытаюсь запустить службу WCF на IIS на нашем сервере. После развертывания я получаю сообщение об ошибке:WCF - проверка подлинности Windows - Параметры безопасности требуют анонимного

Параметры безопасности для этой службы требуют аутентификации «Анонимный», но она не включена для приложения IIS, на котором размещена эта служба.

Я хочу использовать проверку подлинности Windows, и поэтому у меня отключен анонимный доступ. Также обратите внимание, что существует aspNetCompatibilityEnabled (если это имеет значение).

Вот мой web.config:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
    <bindings> 
     <webHttpBinding> 
      <binding name="default"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows" proxyCredentialType="Windows"/> 
       </security> 
      </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <endpointBehaviors> 
      <behavior name="AspNetAjaxBehavior"> 
       <enableWebScript /> 
       <webHttp /> 
      </behavior> 
     </endpointBehaviors> 
     <serviceBehaviors> 
      <behavior name="defaultServiceBehavior"> 
       <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" /> 
       <serviceDebug includeExceptionDetailInFaults="true" /> 
       <serviceAuthorization principalPermissionMode="UseWindowsGroups" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior"> 
      <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" 
      contract="xxx.Web.Services.IRequestService" bindingConfiguration="default"> 
      </endpoint> 
      <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint> 
     </service> 
    </services> 
</system.serviceModel> 

Я искал по всему интернету, не повезло. Любые подсказки очень ценятся.

+3

Вопрос должен определять, какую версию IIS он использует. –

+0

Версия была IIS 6.0 – Rashack

+0

См. Http://stackoverflow.com/questions/9588265/understanding-wcf-windows-authentication too – Lijo

ответ

42

Так что это похоже на довольно распространенную проблему. Дело в том, чтобы удалить Mex с креплениями:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint> 

Alternativelly включить анонимный доступ в IIS и в вашем web.config вы убедитесь, что анонимный доступ запрещен.

Надеюсь, это поможет некоторым другим людям. (Я был на 100% уверен, что попробовал его с удаленным mex.: -O)

+0

Я закончил использовать вашу альтернативу. IIS anon + Windows с web.config, лишая всех анонимных пользователей. У меня есть 3.5 WCF REST с asp.net. спасибо – Nathan

+6

На самом деле, удаление mex не работает. – Andrey

+0

Это работало для меня после следующих шагов, которые я нашел здесь: [link] (https://msdn.microsoft.com/en-us/library/ff648505.aspx), на который я был направлен отсюда: [link] (http://stackoverflow.com/questions/8591238/wcf-says-my-settings-require-anonymous-authentication-but-i-dont-want-them) @Andrey –

0

Да, похоже, вам нужно полностью удалить конечную точку mex. Установка

<serviceMetadata httpGetEnabled="false"/> 

только не работает. Благодаря!

14

Вы можете проверить это one. Мне удалось заставить его работать должным образом.

<configuration> 
    ... 
    <system.serviceModel> 
    ... 
    <bindings> 
     <basicHttpBinding> 
     <binding> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Windows" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    ... 
    </system.serviceModel> 
    ... 
</configuration> 
+1

спасибо за информацию - это было бы бит более полезен, чтобы процитировать соответствующий раздел информации здесь, а не предоставлять голую гиперссылку. –

11

просто используйте свои сервисные привязки для mex тоже.

Так изменить текущий конфиг:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint> 

к

<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint> 

Это должно решить проблему

+0

Спасибо! Это сработало для меня, но для того, чтобы быть ясным, мне также пришлось хранить 'httpGetEnabled =" true "' – McArthey

+0

да, вам тоже нужно это сделать – sandyiit

+0

Работал для меня, используя basicHttpBinding. т. е. изменили привязку на конечной точке «mex» от «mexHttpBinding» до «basicHttpBinding» – Teevus

0

Дополнительное решение:

Вы просто должны убедиться, что служба имя и контракт являются правильными.

Надеюсь, это поможет в некотором роде.

2

Анонимная аутентификация может и в некоторых случаях должна быть включена для службы, но не для сайта.

Так что проверьте, что аутентификация вашего корня на вашем сайте включена только для проверки подлинности Windows. Затем разверните свой сайт, выберите «служебную» папку и убедитесь, что в вашей службе включена поддержка Windows и анонимной аутентификации.

У меня была идентичная среда, где это сработало, только различие в этих средах было аутентификацией службы.Проблема в моем случае не была вызвана выбранными поставщиками (Ntlm или Negotiate), но параметрами проверки подлинности для сайта и службы.

По крайней мере, у меня было идентичное сообщение об ошибке с базовым сервисом MSSQL Master Data Services &, и это было решение. Я получил ошибку при запуске только службы, но сайт работал почти нормально, MDS Explorer не работал, потому что настройки аутентификации службы были неправильными вначале. Причиной этой пропущенной конфигурации может быть ошибка в MDS Configuration Manager при создании нового сайта MDS?

Так что в моем случае проблема не была исправлена ​​путем выполнения каких-либо специальных изменений в файле web.config или в файлах ApplicationHost.config, я не редактировал файлы конфигурации. Просто выбрали правильные параметры проверки подлинности для веб-сайта и его службу в диспетчере IIS. Я не уверен, что это так, но, может быть, стоит попробовать?

1

Это сработало для меня, когда я удаляю конечную точку «mex», а также устанавливаю clientCredentialType = 'Ntlm' Я размещал свой WCF внутри SharePoint.

+0

Это сделало трюк для меня. – NLV

0

Похоже, что проблема с привязкой к MEX была исправлена ​​в .NET 4.0. Изменение версии нашего сервера App Pool .NET CLR версии от 2.0 до 4.0 устраняет проблему.

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