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

Ошибка WCF: вызывающая сторона не была аутентифицирована службой

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

Вызывающий не был аутентифицирован служба

Я использую wsHttpBinding. Я не уверен, какая проверка подлинности ожидается?

                                           
                  
  

<behaviors>
  <serviceBehaviors>
    <behavior name="MyTrakerService.MyTrakerServiceBehavior">
      <!-- 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>

Обновление Он работает, если я меняю привязку к <endpoint "basicHttpBinding" ... /> (из wsHttpBinding) на сервере IIS 7.0, сервере Windows 2008

4b9b3361

Ответ 1

Если вы используете basicHttpBinding, настройте защиту конечной точки на "Нет" и переносите clientCredintialType на "Нет".

<bindings>
    <basicHttpBinding>
        <binding name="MyBasicHttpBinding">
            <security mode="None">
                <transport clientCredentialType="None" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>
<services>
    <service behaviorConfiguration="MyServiceBehavior" name="MyService">
        <endpoint 
            binding="basicHttpBinding" 
            bindingConfiguration="MyBasicHttpBinding"
            name="basicEndPoint"    
            contract="IMyService" 
        />
</service>

Кроме того, убедитесь, что методы проверки подлинности в IIS разрешают анонимный доступ

Ответ 2

Я понял.

Если вы хотите использовать wshttpbinding, вам нужно добавить учетные данные Windows, как показано ниже.

svc.ClientCredentials.Windows.ClientCredential.UserName = "abc";
svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";

спасибо

Ответ 3

Вы пытались использовать basicHttpBinding вместо wsHttpBinding? Если вам не нужна аутентификация, а реализация Ws- * не требуется, вам, вероятно, будет лучше с простым старым basicHttpBinding. WsHttpBinding реализует WS-Security для обеспечения безопасности и аутентификации сообщений.

Ответ 4

установить анонимный доступ в вашем виртуальном каталоге

напишите следующие учетные данные для вашей службы

ADTService.ServiceClient adtService = new ADTService.ServiceClient();
adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname";
adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword";
adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";

после этого вы вызываете свои методы webservice.

Ответ 5

Если вы используете сам сайт, подобный мне, способ избежать этой проблемы (как описано выше) заключается в том, чтобы указать как на стороне хоста, так и на стороне клиента, что режим безопасности wsHttpBinding = NONE.

При создании привязки, как на клиенте, так и на хосте, вы можете использовать этот код:

 Dim binding as System.ServiceModel.WSHttpBinding 
 binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)

или

 System.ServiceModel.WSHttpBinding binding
 binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);

Ответ 6

Мы столкнулись с странной проблемой, когда в папке, где размещалась служба WCF, были некоторые разрешения, которые вызывали проблему.

Ответ 7

если необходимо указать домен (который проверяет имя пользователя и пароль, который использует клиент) в webconfig, вы можете поместить это в раздел service.serviceModel services:

<identity>          
<servicePrincipalName value="example.com" />
</identity>

и в клиенте укажите домен и имя пользователя и пароль:

 client.ClientCredentials.Windows.ClientCredential.Domain = "example.com";
 client.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
 client.ClientCredentials.Windows.ClientCredential.Password = "Password";

Ответ 8

Мне удалось решить общую проблему, выполнив следующие шаги:

  • Перейдите в IIS → Сайты Ваш сайт
  • Панель свойств → Аутентификация
  • Установите Анонимная аутентификация на Отключено
  • Установите Аутентификация Windows на Включено

введите описание изображения здесь

Ответ 9

Это может быть вызвано, если клиент находится в другом домене, чем сервер.

Я столкнулся с этим при тестировании одного из моих приложений с моего ПК (клиента) на моем (облачном) сервере тестирования и простейшем решении, о котором я мог думать, было создание vpn.

Ответ 10

Почему вы не можете просто удалить параметр безопасности вообще для wsHttpBinding ( "none" вместо "message" или "transport" )?