WCF - проверка подлинности Windows - параметры безопасности требуют анонимности - PullRequest
43 голосов
/ 22 июня 2009

Я изо всех сил пытаюсь запустить службу 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>

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

Ответы [ 8 ]

42 голосов
/ 22 июня 2009

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

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

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

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

14 голосов
/ 17 июня 2010

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

<configuration>
  ...
  <system.serviceModel>
    ...
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    ...
  </system.serviceModel>
  ...
</configuration>
11 голосов
/ 16 февраля 2011

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

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

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

до

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

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

3 голосов
/ 30 января 2013

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

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

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

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

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

1 голос
/ 25 декабря 2013

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

0 голосов
/ 03 мая 2017

Кажется, эта проблема с MEX была исправлена ​​в .NET 4.0. Изменение версии пула приложений .NET CLR на нашем сервере с 2.0 на 4.0 решило проблему.

0 голосов
/ 07 ноября 2012

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

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

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

0 голосов
/ 25 марта 2010

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

<serviceMetadata httpGetEnabled="false"/>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...