Ошибка размещения службы WCF в IIS 6.0 - PullRequest
1 голос
/ 16 ноября 2010

В настоящее время у меня есть служба, которую я создал на своей машине, и она отлично работала локально, но при развертывании на нашем сервере Windows 2003 с использованием IIS 6.0 я получаю исключение:

HTTP-запрос не авторизован с схема аутентификации клиента 'Anonymous'. Аутентификация заголовок получен с сервера был 'Переговоры, NTLM'.

Быстрый взгляд на ошибку заставляет поверить, что это легко исправить, но до сих пор ни одно из исправлений не помогло мне.

Вот что я имею в Web.config моего сервиса:

<services>
   <service name="WcfService2.Service1" 
            behaviorConfiguration="WcfService2.Service1Behavior">
     <endpoint address="" binding="basicHttpBinding" 
               bindingName="basicBindingConfig" 
               contract="WcfService2.IService1"/>
   </service>
 </services>

 <bindings>
   <basicHttpBinding>
     <binding name="basicBindingConfig">
       <security mode="TransportCredentialOnly">
         <transport clientCredentialType="Ntlm"/>
       </security>
     </binding>
   </basicHttpBinding>
 </bindings>

<behaviors>
  <serviceBehaviors>
    <behavior name="WcfService2.Service1Behavior">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

Мой тестовый клиент имеет файл App.config со следующим:

<bindings>
  <basicHttpBinding>
    <binding name="basicBindingConfig_IService1">
      <security mode="None">
        <transport clientCredentialType="Ntlm" 
             proxyCredentialType="None" realm="" />
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

И мой тестовый клиентский вызов доступа:

Dim client As New ServiceReference1.Service1Client()

client.GetData()

Есть идеи, что здесь не так? Я попытался изменить тип Ntlm на Windows и None, ни один из которых не сработал. Я могу перейти к нему в браузере, и он выглядит нормально, но когда я действительно начинаю пытаться использовать его, я получаю вышеуказанную ошибку.

1 Ответ

0 голосов
/ 17 ноября 2010

Хм, так что вы попробовали transportClientCredential = Windows, и она все еще не работает, взгляните на:

С http://support.microsoft.com/kb/215383

IIS 6.0

  1. Нажмите «Пуск», выберите «Выполнить», введите cmd и нажмите клавишу ВВОД.
  2. Найдите каталог, содержащий файл Adsutil.vbs.По умолчанию это каталог C: \ Inetpub \ Adminscripts.
  3. Используйте следующую команду для получения текущих значений свойства метабазы ​​NTAuthenticationProviders: cscript adsutil.vbs get w3svc / WebSite / root / NTAuthenticationProviders InВ этой команде WebSite является заполнителем для идентификационного номера веб-сайта.Идентификационный номер веб-сайта по умолчанию: 1.

    Предупреждение. Не выполняйте операцию копирования и вставки, чтобы вставить команду из этой статьи.Эта операция может вызвать проблемы с настройкой свойства.Чтобы избежать этих проблем, введите всю команду в командной строке.

    Примечание. Эта команда не выполняется, если свойство метабазы ​​NTAuthenticationProviders не определено.Для получения дополнительной информации см. Примечание ранее в этом разделе.

    Если процесс согласования включен, эта команда возвращает следующую информацию: NTAuthenticationProviders: (STRING) «Согласование, NTLM»

  4. Если команда на шаге 3 не возвращает строку «Negotiate, NTLM», используйте следующую команду для включения процесса согласования: cscript adsutil.vbs set w3svc / WebSite / root / NTAuthenticationProviders «Negotiate, NTLM»
  5. Повторите шаг 3, чтобы убедиться, что процесс согласования включен.

Примечание. Если при попытке убедиться, что процесс согласования включен, вы получаете сообщение об ошибке, убедитесь, что вы не оставилипробел между «переговоры» и «NTLM».Например, «Согласование, NTLM» отличается от «Согласование, NTLM».

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