Подтвердить что ты не робот

WCF - проверка подлинности Windows - параметры безопасности требуют анонимного

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

Параметры безопасности для этой службы требуют аутентификации "Анонимный", но она не включена для приложения 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>

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Итак, измените текущую конфигурацию:

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

to

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

<serviceMetadata httpGetEnabled="false"/>

один не работал. Спасибо!

Ответ 7

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

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

Надеюсь, что это поможет.

Ответ 8

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